GaussDB(DWS)查看后臺(tái)活躍SQL和執(zhí)行狀態(tài)
背景:使用數(shù)據(jù)庫過程中,執(zhí)行一條查詢語句很慢,想知道后臺(tái)語句的執(zhí)行情況。可通過以下方式查看數(shù)據(jù)庫后臺(tái)當(dāng)前執(zhí)行的所有語句和語句的執(zhí)行情況。

1. PGXC_STAT_ACTIVITY視圖介紹
PGXC_STAT_ACTIVITY視圖顯示當(dāng)前集群下所有CN的查詢相關(guān)的信息,只有系統(tǒng)管理員才有權(quán)限執(zhí)行。該視圖的coorname表示執(zhí)行該語句的CN,query_id字段表示該query的唯一ID,同一條語句在不同節(jié)點(diǎn)的query_id相同,不同語句的query_id不同。pid表示該語句在對應(yīng)節(jié)點(diǎn)上的線程ID,usename表示執(zhí)行該語句的用戶,query_start表示該語句開始執(zhí)行的時(shí)間,enqueue表示語句是否正在排隊(duì)。該字段為空表示未處于排隊(duì)狀態(tài),state字段表示對應(yīng)的語句執(zhí)行狀態(tài),常見狀態(tài)如下:
active:后端正在執(zhí)行一個(gè)查詢。
idle:后端正在等待一個(gè)新的客戶端命令。
idle in transaction:后端在事務(wù)中,但事務(wù)中沒有語句在執(zhí)行。
idle in transaction (aborted):后端在事務(wù)中,但事務(wù)中有語句執(zhí)行失敗。
利用此視圖對相關(guān)字段進(jìn)行過濾,即可查詢得到當(dāng)前的后臺(tái)所有CN上的活躍語句:
select coorname, usename, client_addr, sysdate-query_start as dur, enqueue, query_id, substr(query,1,60) from pgxc_stat_activity where usename != 'Ruby' and state != 'idle' order by dur desc;
其中,Ruby用戶為數(shù)據(jù)庫的初始用戶,一般情況下我們不關(guān)心初始用戶相關(guān)的語句。執(zhí)行上述查詢即可得到當(dāng)前后臺(tái)所有活躍的sql情況和已經(jīng)執(zhí)行的時(shí)長。接下來,可以根據(jù)查到的query_id利用等待視圖PGXC_THREAD_WAIT_STATUS對執(zhí)行的慢sql進(jìn)行分析,查看語句的執(zhí)行狀態(tài)。
2. PGXC_THREAD_WAIT_STATUS視圖介紹
通過CN節(jié)點(diǎn)查看PGXC_THREAD_WAIT_STATUS視圖,可以查看集群全局各個(gè)節(jié)點(diǎn)上所有SQL語句產(chǎn)生的線程之間的調(diào)用層次關(guān)系,以及各個(gè)線程的阻塞等待狀態(tài),從而更容易定位進(jìn)程停止響應(yīng)問題以及類似現(xiàn)象的原因。該視圖中我們需重點(diǎn)關(guān)注wait_status字段和wait_event字段,其中,wait_status字段表示當(dāng)前線程的等待狀態(tài),wait_event表示等待事件,一般為acquire lock、acquire lwlock、wait io三種類型。根據(jù)上一步查詢得到的query_id查詢等待視圖,即可得到該語句的等待時(shí)間狀態(tài),分析出慢sql的瓶頸點(diǎn):
select * from pgxc_thread_wait_status where query_id = 20971544;
例如:
select * from pgxc_thread_wait_status where query_id=20971544; node_name | db_name | thread_name | query_id | tid | lwtid | ptid | tlevel | smpid | wait_status | wait_event --------------+----------+--------------+----------+-----------------+-------+-------+--------+-------+---------------------- datanode1 | postgres | coordinator1 | 20971544 | 139902867994384 | 22735 | | 0 | 0 | wait node: datanode3 | datanode1 | postgres | coordinator1 | 20971544 | 139902838634256 | 22970 | 22735 | 5 | 0 | synchronize quit | datanode1 | postgres | coordinator1 | 20971544 | 139902607947536 | 22972 | 22735 | 5 | 1 | synchronize quit | datanode2 | postgres | coordinator1 | 20971544 | 140632156796688 | 22736 | | 0 | 0 | wait node: datanode3 | datanode2 | postgres | coordinator1 | 20971544 | 140632030967568 | 22974 | 22736 | 5 | 0 | synchronize quit | datanode2 | postgres | coordinator1 | 20971544 | 140632081299216 | 22975 | 22736 | 5 | 1 | synchronize quit | datanode3 | postgres | coordinator1 | 20971544 | 140323627988752 | 22737 | | 0 | 0 | wait node: datanode3 | datanode3 | postgres | coordinator1 | 20971544 | 140323523131152 | 22976 | 22737 | 5 | 0 | net flush data | datanode3 | postgres | coordinator1 | 20971544 | 140323548296976 | 22978 | 22737 | 5 | 1 | net flush data datanode4 | postgres | coordinator1 | 20971544 | 140103024375568 | 22738 | | 0 | 0 | wait node: datanode3 datanode4 | postgres | coordinator1 | 20971544 | 140102919517968 | 22979 | 22738 | 5 | 0 | synchronize quit | datanode4 | postgres | coordinator1 | 20971544 | 140102969849616 | 22980 | 22738 | 5 | 1 | synchronize quit | coordinator1 | postgres | gsql | 20971544 | 140274089064208 | 22579 | | 0 | 0 | wait node: datanode4 | (13 rows)
可以看到,該語句在CN1執(zhí)行,coordinator1在等datanode4,datanode4在等datanode3,datanode3在的等待狀態(tài)為net flush data,表示該節(jié)點(diǎn)正在向網(wǎng)絡(luò)中發(fā)送數(shù)據(jù),說明整個(gè)查詢的瓶頸點(diǎn)在datanode3的網(wǎng)絡(luò)傳輸,該節(jié)點(diǎn)可能存在網(wǎng)絡(luò)瓶頸。
等待視圖中各等待狀態(tài)詳情可以通過以下文檔查看:
https://support.huaweicloud.com/devg-dws/dws_04_0565.html
3. 二者結(jié)合使用
對于一些有明顯特征的SQL,比如表名/別名/注釋等,能根據(jù)該特征標(biāo)志出唯一sql,可以執(zhí)行以下SQL將PGXC_STAT_ACTIVITY和PGXC_THREAD_WAIT_STATUS進(jìn)行關(guān)聯(lián)查詢:
select w.* from pgxc_thread_wait_status w left join pgxc_stat_activity a on w.query_id=a.query_id where a.query_id != 0 and a.query like '%explain performance%' and a.query not like '%pgxc_stat_activity%';
本例中,explain performance能夠標(biāo)識(shí)唯一SQL,即可使用該sql直接查詢得到等待視圖情況。
數(shù)據(jù)倉庫服務(wù) GaussDB(DWS) Gauss AP EI企業(yè)智能
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。