PG資料庫記憶體告警了怎麼分析
前幾天寫了CPU分析與IO分析的文章,本來昨天想再湊一個記憶體分析的,不過因為昨天一大早就去拜訪客戶了,所以今天補上。今天早上本來和優諾的傲寒約好了去他那裡取取經,聽聽他對智慧化運維的看法,不過因為一些其他安排臨時取消了,十分遺憾。
PG資料庫遇到記憶體問題要立即進行分析的場景並不多,因為大多數PG資料庫的記憶體使用率過高的報警並不意味著記憶體使用情況異常,記憶體真的不夠用了。因為PG資料庫是使用DOUBLE BUFFERING機制的,大量的記憶體很可能被BUFFER/CACHE佔用了。
上面的free命令可以看到32G記憶體使用了15G多,但是free只剩下599M了,BUFF/CACHE佔了15G多。不過如果我們看available,有9G多,當前這個PG伺服器的記憶體是充足的。從這個例子上看到,我們看fee命令的結果的時候,不應該看free,看available更為準確。
/proc/meminfo可以更詳細的看到OS的記憶體情況,我們可以關注紅框裡的幾個數字。Dirty是FILE CACHE中尚未寫入磁碟的髒資料,是無法快速丟棄的記憶體,如果這個指標持續較高,那麼說明OS的回寫機制或者磁碟存在效能問題,是需要關注的。PageTalbes如果比較大,對於PG資料庫來說,很可能是配置了較大的shared_buffers,但是沒有啟用HugePages,這樣除了會影響PG資料庫訪問記憶體的效能外,還會佔據大量的不必要的記憶體。AnonHugePages指標大於零說明沒有關閉透明大頁,而且已經使用了透明大頁,對於PG、Oracle等資料庫來說,透明大頁的缺點大於優點,會引起記憶體碎片,建議關閉。另外需要關注的是SWAP的使用率,如果FREE記憶體很大,但是SWAP使用率超過20%,很可能是OS的NUMA記憶體方面的配置存在問題,沒有全域性分配記憶體。
遇到PG資料庫的空閒記憶體不足的問題,首先透過這些機制分析OS記憶體是否真的存在風險,如果沒有發現明顯的風險,暫時就不需要做進一步的分析了。如果真的存在風險,我們還可以繼續在OS層面查詢。
ps aux –sort -rss |head -20命令可以查出rss使用最高的20個程式。然後找出存在問題的程式,用smem做進一步分析。
如果找到了存在問題的程式,可以用smem進一步去做分析。其中USS是程式私有記憶體,PSS是私有記憶體+共享記憶體的總和。
如果在OS層面找到了存在問題的程式,那麼可以使用上面的語句去查詢其PG會話的資訊,進一步進行定位。一般情況下,PG會話佔用較多的記憶體可能是做VACUUM、ANALYZE、排序,表連線、記憶體臨時表等操作。
如果不存在某個程式使用記憶體過多,而是大量的程式都佔用差不多的記憶體,那麼很可能是資料庫併發執行某類SQL,使用了排序,表連線等臨時記憶體分配。這時候就要去分析資料庫的效能是否存在問題,導致了某類SQL或者某條SQL併發執行量較大。亦或是某條SQL的執行計劃出現了錯誤,導致執行時間過長,併發執行量過大,佔用了大量實體記憶體。
來自 “ 白鱔的洞穴 ”, 原文作者:白鱔;原文連結:https://mp.weixin.qq.com/s/n4bDtGINtWu8Q_VrZvuMSw,如有侵權,請聯絡管理員刪除。
相關文章
- 分析師解讀記憶體資料庫MemSQLSP記憶體資料庫SQL
- 如何檢視MySQL資料庫佔多大記憶體,佔用太多記憶體怎麼辦?MySql資料庫記憶體
- 資料庫新兵:分散式實時分析記憶體資料庫eSight資料庫分散式記憶體
- 【記憶體資料庫】TimesTen記憶體資料庫
- 記一次記憶體告警記憶體
- iOS開發筆記— 資料庫、Crash、記憶體問題分析iOS筆記資料庫記憶體
- 記憶體資料庫如何發揮記憶體優勢?記憶體資料庫
- php記憶體溢位了怎麼辦?PHP記憶體溢位
- 記憶體資料庫的行存表索引是怎麼做到加速的記憶體資料庫索引
- 【大頁記憶體】Oracle資料庫配置大頁記憶體記憶體Oracle資料庫
- 瀚高資料庫記憶體結構資料庫記憶體
- Oracle - 資料庫的記憶體結構Oracle資料庫記憶體
- Oracle - 資料庫的記憶體調整Oracle資料庫記憶體
- MongoDB 如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- MongoDB如何使用記憶體?為什麼記憶體滿了?MongoDB記憶體
- 磁碟資料庫與記憶體資料庫的特點比較資料庫記憶體
- 資料庫實現原理#6(共享記憶體)資料庫記憶體
- 南大通用極速記憶體資料庫記憶體資料庫
- PG資料庫為什麼要用autovacuum資料庫
- pg_resetwal pg_resetxlog 重整 pg資料庫 wal 與pg_controldata 。 資料庫恢復。資料庫LDA
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- 電腦關機了,記憶體就沒資料了嗎?記憶體
- PG 資料庫 從阿里雲pg rds 同步資料。資料庫阿里
- 【PG資料庫】PG資料庫的安裝及連線方法資料庫
- PG-pg資料庫安裝vector資料庫
- Go1.20 arena 能手動管理記憶體了,怎麼用?Go記憶體
- 93面試常問:Redis 記憶體滿了怎麼辦?面試Redis記憶體
- 從Oracle資料庫故障到AIX記憶體管理Oracle資料庫AI記憶體
- Redis資料已經過期了,為什麼還佔用記憶體?Redis記憶體
- win10記憶體不足怎麼解決_win10記憶體不足怎麼辦Win10記憶體
- 記憶體資料庫適合多大規模的資料集?UY記憶體資料庫
- 2G記憶體搞定一億資料的分析引擎記憶體
- Java記憶體模型是什麼,為什麼要有Java記憶體模型,Java記憶體模型解決了什麼問題?Java記憶體模型
- 故障分析 | MySQL 資料庫升級後,資料庫怎麼卡住了MySql資料庫
- win10記憶體不足會黑屏嗎_win10電腦記憶體不足黑屏了怎麼辦Win10記憶體
- Ubuntu記憶體分析Ubuntu記憶體
- JVM記憶體分析JVM記憶體
- 解讀記憶體資料庫的儲存需求RC記憶體資料庫