本文將繼續Postgresql CPU性能問題進行展開。Postgresql的出現cpu問題,一般是CPU使用率較高,好比逼近100%。針對這種狀況,你們能夠優先考慮去查找數據庫的鏈接數,方法以下,能夠查找到有哪些活躍的SQL進程。web
select * from pg_stat_activity where state = 'active';
若是想當即解決到這些問題,那麼能夠選擇將這些進程殺掉便可。方法以下:sql
1>先找出相關的SQL [pid]數值,以下圖:數據庫
2>運行SQL語句:app
SELECT pg_cancel_backend([括號中輸入上一步查找的pid數值])
以上是治標不治本的操做過程,那麼如何避免這種狀況再次發生呢?那麼就要追蹤當時數據庫在發生問題的時候,環境中發生了什麼?好比是否是在進行什麼維護,好比定時任務等?跑什麼腳本?這種問題第一次出現的時間節點是什麼?那麼就須要在那個時間節點附近進行分析,注意是附近。分析系統作了什麼?能夠經過系統日誌(app log, web log, postgresql.log,甚至是環境部署的log)查看,是否是有什麼消息。也能夠經過以前的SQL進程的細節去反推系統在作什麼操做,這也是比較靠譜的一種方法。重點分析SQL執行中有沒有髒讀,有沒有死鎖等狀況發生。若是有那麼就要引發重視了;其次能夠評估,從業務的角度去查看是否是能夠優化邏輯,進而減小對CPU資源的依賴。好比分析相關SQL執行計劃等,關於SQL執行計劃的簡單使用方法,你們能夠參考文章:http://www.javashuo.com/article/p-mrwuqzze-nc.htmlide
其次是在分析解決CPU問題的時候,如上篇文章所說,不用總盯着CPU,CPU的使用繁忙,不少時候也是因爲其餘資源受限或者異常致使的,好比內存耗盡,磁盤用完等有些極端的狀況。post
那麼是在進程中發現了不少系統行爲,好比auto analyze/auto vaccume等,那麼就須要去分析postgresql系統層面的一些問題,能夠相應地參考我關於postgresql的其餘文章。性能
若是你們在實際的工做中遇到了性能相關的問題,均可以私信或者留言,很是高興能與你們一塊兒交流。測試
你們也能夠掃描並關注以下公衆號「TimTest」,會有更多性能測試相關內容分享。優化