PostgreSQL的黃金指標 — 負載
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
前言在分析數據庫性能問題的時候,筆者尤其鐘愛負載這個指標,負載是"需求"與"能力"之間的直接差值,它橫跨 CPU 與 I/O,兩類瓶頸一眼可見,筆者在分析數據庫性能問題的時候,往往第一時間都先瞅瞅這個指標,再做后續判斷。這篇文章中,讓我們聊聊負載那些事兒。 系統負載以 https://www.scoutapm.com/blog/understanding-load-averages[1] 為例,作者將負載定義為 run-queue length:即當前處于 Running 狀態 + D(不可中斷 I/O) 狀態的進程總數,不可中斷休眠狀態的進程一般是在等待 I/O 完成的進程,也就是說,它同時覆蓋了 CPU 和阻塞 I/O 的排隊情況。因此,不妨將系統負載看做是真實并發壓力的體溫計,負載既能做容量紅線,又能做性能診斷入口,堪稱是數據庫運維的 MVP 指標。在此文中,作者用"包含一車道的大橋"的交通比喻解釋數值含義: ?0.00 – 1.00 ? 橋面不排隊;?1.00 ? 剛好滿載;?1.00 ? 開始排隊,2.00 表示一條車道正行駛、一條車道在等,依此類推。
在實際生產系統中,一般不建議系統滿負荷運行。通用的經驗法則是:平均負載 = 0.7 * CPU 邏輯核數 ?0.70:長期高于此值就值得關注;?1.00:持續超過 1 應立即排查,否則很快就會告警;?5.00:意味著系統可能已極度卡頓,需要立刻介入,緊急處理。 橫截面趨勢除了關注自身負載之外,"負載趨勢"也顯得尤為重要,瞬時負載告訴你"現在疼不疼",而負載趨勢告訴你"病是怎么得的、會不會復發"。 ?如果 load1 > load5 > load15,說明剛剛進入擁塞,查詢/IO 正在排隊,這個時候就需要立即采取動作,望聞問切,如果是高峰時段,可短暫擴容或快速限流。?如果 load1 < load5 < load15,說明負載消退中,可能是峰值過去、批量任務結束或索引命中率恢復,我們需要關注是否有殘留鎖、慢 VACUUM、慢查詢等尾巴,避免再次反彈。?另外也別忽視"負加速度":如果 load1 < 0.5 × load5,可能是故障恢復后流量驟降?若 load15 長期高而 CPU% 不高,多半是 I/O 慢或鎖爭用;優化難度往往更高,需要結構性調優,比如索引、建模、硬件升級等 歷史趨勢:從曲線讀出故事1.日周期鋸齒,可能原因是固定批量任務 / 報表 / 備份,可以將批量作業移到離峰,加并行或分區2.周末平坦,而周一陡升,意味著周末流量低、緩存冷,可以熱備預熱、增加自動伸縮冷啟動窗口3.如果基線緩慢抬高,意味著平均訪問增多,新功能上線、數據集增大,我們可以重新對當前集群算力進行預估,跑基準驗證新版本 SQL4.忽高忽低"鋸齒",這種就相對要麻煩一些,判斷是否有鎖競爭、IO 突刺 (比如 checkpoint、freeze 風暴、索引失效等) 只有把 load 1/5/15 的加速度和歷史曲線一起納入監控,才能做到既能早預警、又能追根溯源,把數據庫性能問題扼殺在萌芽階段。 瑞士軍刀 sar -q又看到我們的老朋友了,是的,又是它 sar。前面介紹了使用 sar 分析網絡丟包排障的文章,sar 觀察負載也是一把好手
Run Queue Size —— 當前處于 R 狀態的任務數 Process List Size —— 系統進程 (線程) 總數 blocked —— 當前處于 D 狀態 (不可中斷,等待 I/O 完成) 的任務數, 值大表明正在卡磁盤 / 網絡 / NFS / 復制;常與 iostat %util?&?await 一起看 數據庫負載前面聊完了系統負載,那么關于數據庫,如何去衡量"負載"這個指標呢?操作系統和數據庫畢竟是分開的,數據庫跑在操作系統之上,嚴格來說它們是系統的指標,而非數據庫軟件自身的指標,數據庫自身也可能因為各種原因出幺蛾子。 因此,回到數據庫自身,是否有類似的負載指標?很可惜,原生 PostgreSQL 并沒有類似這樣的指標,但是我們知道,一些 CLI 工具是包含 LOAD 這個指標的,比如 pg_top、pg_activity、pg_views 等等。以 pg_top 為例: ![]() 那么這個 load 是如何計算出來的呢?可惜的是,pg_top 本身 從不計算 負載,只負責"搬運 + 排版"。
而對于遠程模式,獲取源端機器的負載,則借助于 pg_proctab 插件,同樣也是取自 OS,其提供了如下幾個函數: ?pg_cputime?pg_loadavg?pg_memusage?pg_proctab 因此,嚴格來說,數據庫的負載需要我們去自行計算,感興趣的童鞋可以參照馮董的文章 PostgreSQL 的 KPI[2]。 小結負載是個好指標,負載是個好指標,負載是個好指標 ???? References
轉載:https://mp.weixin.qq.com/s/QBS84VokX7jd7pACTjv1ZA 該文章在 2025/8/12 10:26:08 編輯過 |
關鍵字查詢
相關文章
正在查詢... |