數(shù)據(jù)庫(kù) 在日常使用的過(guò)程中會(huì)產(chǎn)生很多SQL語(yǔ)句,而如果有些SQL語(yǔ)句運(yùn)行了很長(zhǎng)時(shí)間還沒(méi)有結(jié)束,這些語(yǔ)句會(huì)消耗很多的系統(tǒng)性能。
那么如何查詢到有哪些SQL語(yǔ)句影響了系統(tǒng)的運(yùn)行呢?
學(xué)了本節(jié)課程后,您就將會(huì)掌握初步定位GaussDB(for openGauss)慢SQL的方法。
操作場(chǎng)景
- 數(shù)據(jù)庫(kù)執(zhí)行SQL語(yǔ)句長(zhǎng)時(shí)間無(wú)響應(yīng)。
- 數(shù)據(jù)庫(kù)CPU/內(nèi)存壓力一直很大。
操作步驟
1. 使用DAS或者gsql連接實(shí)例。
2. 查詢系統(tǒng)中長(zhǎng)時(shí)間運(yùn)行的查詢語(yǔ)句。
SELECT current_timestamp - query_start AS runtime, datname, usename, query FROM pg_stat_activity where state != 'idle' ORDER BY 1 desc;
查詢后會(huì)按執(zhí)行時(shí)間從長(zhǎng)到短順序返回查詢語(yǔ)句列表,第一條結(jié)果就是當(dāng)前系統(tǒng)中執(zhí)行時(shí)間最長(zhǎng)的查詢語(yǔ)句。返回結(jié)果中包含了系統(tǒng)調(diào)用的SQL語(yǔ)句和用戶執(zhí)行SQL語(yǔ)句,請(qǐng)根據(jù)實(shí)際找到用戶執(zhí)行時(shí)間長(zhǎng)的語(yǔ)句。
若當(dāng)前系統(tǒng)較為繁忙,可以通過(guò)限制current_timestamp - query_start大于某一閾值來(lái)查看執(zhí)行時(shí)間超過(guò)此閾值的查詢語(yǔ)句。
SELECT query FROM pg_stat_activity WHERE current_timestamp - query_start > interval '1 days';
3. 設(shè)置參數(shù)track_activities為on。
SET track_activities = on;
當(dāng)此參數(shù)為on時(shí),數(shù)據(jù)庫(kù)系統(tǒng)才會(huì)收集當(dāng)前活動(dòng)查詢的運(yùn)行信息。
4. 從當(dāng)前活動(dòng)會(huì)話視圖查找問(wèn)題會(huì)話的線程ID。
SELECT datid, pid, state, query FROM pg_stat_activity;
顯示類似如下信息,其中pid的值即為該會(huì)話的線程ID。
datid | pid | state | query
-------+-----------------+--------+-------
13205 | 139834762094352 | active |
13205 | 139834759993104 | idle |
(2 rows)
如果state字段顯示為idle,則表明此連接處于空閑,等待用戶輸入命令。
如果僅需要查看非空閑的查詢語(yǔ)句,則使用如下命令查看:
SELECT datid, pid, state, query FROM pg_stat_activity WHERE state != 'idle';
5. 分析長(zhǎng)時(shí)間運(yùn)行的查詢語(yǔ)句狀態(tài)。
- 若查詢語(yǔ)句處于正常狀態(tài),則等待其執(zhí)行完畢。
如果是因?yàn)镾QL執(zhí)行效率低,建議參考優(yōu)化SQL語(yǔ)句。
- 若查詢語(yǔ)句不正常執(zhí)行,則參考步驟6結(jié)束異常會(huì)話。
6. 根據(jù)線程ID結(jié)束會(huì)話。
SELECT pg_terminate_backend(139834762094352);
顯示類似如下信息,表示結(jié)束會(huì)話成功。
pg_terminate_backend
----------------------
t
(1 row)
顯示類似如下信息,表示用戶正在嘗試結(jié)束當(dāng)前會(huì)話,此時(shí)僅會(huì)重連會(huì)話,而不是結(jié)束會(huì)話。
FATAL: terminating connection due to administrator command
FATAL: terminating connection due to administrator command
The connection to the server was lost. Attempting reset: Succeeded.
說(shuō)明:gsql客戶端使用pg_terminate_backend函數(shù)終止本會(huì)話后臺(tái)線程時(shí),客戶端不會(huì)退出而是自動(dòng)重連。
- GaussDB集群搭建_SQL數(shù)據(jù)庫(kù)是誰(shuí)發(fā)明的_高斯數(shù)據(jù)庫(kù)集群搭建_華為云
- GaussDB數(shù)據(jù)庫(kù)云擴(kuò)展_華為GaussDB數(shù)據(jù)庫(kù)_高斯數(shù)據(jù)庫(kù)云擴(kuò)展
- 云數(shù)據(jù)庫(kù)Gaussdb數(shù)據(jù)庫(kù)索引_華為gaussdb__gaussdb 數(shù)據(jù)庫(kù)
- GaussDB(DWS)常用SQL_常用SQL命令_SQL語(yǔ)法
- GaussDB如何連接_gaussdb怎么樣_高斯數(shù)據(jù)庫(kù)如何連接_華為云
最新文章
- GaussDB案例指南_高斯數(shù)據(jù)庫(kù)函數(shù)_高斯數(shù)據(jù)庫(kù)案例指南_華為云
- 華為云資料 2021年 3月刊
- GaussDB咋樣_openGauss和GaussDB的區(qū)別_高斯數(shù)據(jù)庫(kù)咋樣_華為云
- 數(shù)據(jù)安全-數(shù)據(jù)庫(kù)安全-數(shù)據(jù)庫(kù)審計(jì)工具
- GaussDB華為生態(tài)_opengauss和gaussdb_高斯數(shù)據(jù)庫(kù)華為生態(tài)_華為云
- 數(shù)據(jù)安全-數(shù)據(jù)庫(kù)安全-配置數(shù)據(jù)庫(kù)sql審計(jì)規(guī)則