第一步:使用TOP命令查看占用CPU高的postgresql進程,並獲取該進程的ID號,如圖該id號為3640
第二步:切換到postgres用戶,並且psql連接到數據庫,執行如下查詢語句
SELECT procpid, START, now() - START AS lap, current_query FROM ( SELECT backendid, pg_stat_get_backend_pid (S.backendid) AS procpid,
pg_stat_get_backend_activity_start (S.backendid) AS START,pg_stat_get_backend_activity (S.backendid) AS current_query FROM (SELECT
pg_stat_get_backend_idset () AS backendid) AS S) AS S WHERE current_query <> '<IDLE>' and procpid=25400 ORDER BY lap DESC;
procpid:進程id 如果不確認進程ID,將上面的條件去掉,可以逐條分析
start:進程開始時間
lap:經過時間
current_query:執行中的sql
怎樣停止正在執行的sql :SELECT pg_cancel_backend(進程id);或者用系統函數
kill -9 進程id;
第三步:查看該sql的執行計划(使用explain analyze + sql語句的格式)
第四步:分析執行計划,本項目是由於該語句沒有走索引,導致查詢時間過長,具體原因可以查看執行計划來處理。如: