【云圖說】第235期 DDS讀寫兩步走 帶您領略只讀節點的風采
732
2025-04-04
數據庫在日常使用的過程中會產生很多SQL語句,而如果有些SQL語句運行了很長時間還沒有結束,這些語句會消耗很多的系統性能。
那么如何查詢到有哪些SQL語句影響了系統的運行呢?
學了本節課程后,您就將會掌握初步定位GaussDB(for openGauss)慢SQL的方法。
操作場景
數據庫執行SQL語句長時間無響應。
數據庫CPU/內存壓力一直很大。
操作步驟
1. ??使用DAS或者gsql連接實例。
2. ? 查詢系統中長時間運行的查詢語句。
SELECT current_timestamp - query_start AS runtime, datname, usename, query FROM pg_stat_activity where state != 'idle' ORDER BY 1 desc;
查詢后會按執行時間從長到短順序返回查詢語句列表,第一條結果就是當前系統中執行時間最長的查詢語句。返回結果中包含了系統調用的SQL語句和用戶執行SQL語句,請根據實際找到用戶執行時間長的語句。
若當前系統較為繁忙,可以通過限制current_timestamp - query_start大于某一閾值來查看執行時間超過此閾值的查詢語句。
SELECT query FROM pg_stat_activity WHERE current_timestamp - query_start > interval '1 days';
3. ??設置參數track_activities為on。
SET track_activities = on;
當此參數為on時,數據庫系統才會收集當前活動查詢的運行信息。
4. ? 從當前活動會話視圖查找問題會話的線程ID。
SELECT datid, pid, state, query FROM pg_stat_activity;
顯示類似如下信息,其中pid的值即為該會話的線程ID。
datid | pid | state | query -------+-----------------+--------+------- 13205 | 139834762094352 | active | 13205 | 139834759993104 | idle | (2 rows)
如果state字段顯示為idle,則表明此連接處于空閑,等待用戶輸入命令。
如果僅需要查看非空閑的查詢語句,則使用如下命令查看:
SELECT datid, pid, state, query FROM pg_stat_activity WHERE state != 'idle';
5. ??分析長時間運行的查詢語句狀態。
若查詢語句處于正常狀態,則等待其執行完畢。
如果是因為SQL執行效率低,建議參考官方文檔優化SQL語句。
若查詢語句不正常執行,則參考步驟6結束異常會話。
6. ? 根據線程ID結束會話。
SELECT pg_terminate_backend(139834762094352);
顯示類似如下信息,表示結束會話成功。
pg_terminate_backend ---------------------- t (1 row)
顯示類似如下信息,表示用戶正在嘗試結束當前會話,此時僅會重連會話,而不是結束會話。
FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command The connection to the server was lost. Attempting reset: Succeeded.
gsql客戶端使用pg_terminate_backend函數終止本會話后臺線程時,客戶端不會退出而是自動重連。
云小課 云數據庫 GaussDB(for openGauss) 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。