GaussDB for DWS Hang問題定位指南

      網(wǎng)友投稿 749 2025-04-01

      1?Hang問題基礎(chǔ)知識


      GaussDB for DWS Hang問題定位指南

      GaussDB for DWS 為分布式數(shù)據(jù)庫,通常由于單節(jié)點亞健康、系統(tǒng)資源緊張或查詢本身的計劃等問題,造成系統(tǒng)疑似發(fā)生Hang。Hang問題的產(chǎn)生原因由很多種,比如,死鎖等待、日志同步等待、事務(wù)超時、通信故障、數(shù)據(jù)溢出發(fā)生死循環(huán)等等,更為常見的是由于執(zhí)行慢、中間結(jié)果集傾斜而導(dǎo)致的疑似Hang。掌握Hang問題的基本定位方法對于大集群環(huán)境下快速找準(zhǔn)疑似阻塞點,修復(fù)故障環(huán)境或優(yōu)化執(zhí)行性能是至關(guān)重要的。

      1.1?常用視圖

      目前,GaussDB for DWS對外提供諸多系統(tǒng)視圖,可以用來輔助Hang問題的分析定位,

      常用視圖及用法說明如下表所示。(☆代表常用程度)

      pgxc_stat_activity ☆☆☆

      查詢當(dāng)前集群所有DN實例上各個session的信息,重點關(guān)注正在執(zhí)行(state狀態(tài)為active)的SQL。我們一般首先分析pgxc_stat_activity中的內(nèi)容,初步根據(jù)執(zhí)行時間篩選出疑似query,然后使用此query的query_id和視圖pgxc_thread_wait_status結(jié)合,獲取此query集群級別的線程狀態(tài)進行hang問題分析。

      注:此視圖需要以超級用戶的身份來運行

      在問題分析時,我們首先需要客戶反饋的疑似hang的作業(yè)的信息,根據(jù)作業(yè)所在的databse、運行作業(yè)的用戶身份、運行作業(yè)客戶端以及運行作業(yè)所連接的實例CN名稱初步篩選出問題SQL的運行信息,具體運行信息見附件中字段含義解釋。比如疑似hang作業(yè)是以omm用戶運行在postgres數(shù)據(jù)庫連接到cn_5001實例上運行的,我們使用如下SQL進行作業(yè)狀態(tài)查詢

      我們可以根據(jù)上述返回的結(jié)果,結(jié)合作業(yè)運行的客戶端名稱、客戶端ip、作業(yè)query運行開始時間query_start進一步篩選出疑似hang作業(yè)。

      【附:視圖各字段含義】

      pgxc_thread_wait_status ?☆☆☆☆☆

      查詢集群全局所有線程的層次調(diào)用關(guān)系及阻塞等待情況,通常在視圖查詢語句增加其他過濾條件(比如根據(jù)pgxc_stat_activity篩選出來的疑似hang的SQL的query_id),縮小關(guān)注排查范圍。

      【附:視圖各字段含義】

      pg_thread_wait_status ?☆☆☆☆

      單個實例上所有作業(yè)線程的層次調(diào)用關(guān)系及阻塞等待情況,在大集群復(fù)雜query問題定位時,視圖pgxc_thread_wait_status返回的信息過多,會對問題定位形成一定干擾,這時可以在CN上通過execute direct on語法獲取指定dn實例的作業(yè)線程信息。比如要獲取dn_6001_dn_6002節(jié)點的作業(yè)線程調(diào)用信息

      pgxc_comm_recv_stream ?☆☆☆

      查詢集群所有DN的通信庫接收流狀態(tài),輔助通信層發(fā)生收發(fā)Hang的排查定位。

      pgxc_comm_send_stream ?☆☆☆

      查詢集群所有DN的通信庫發(fā)送流狀態(tài),與pgxc_comm_recv_stream視圖結(jié)合使用,來定位通信層的收發(fā)Hang問題。

      pgxc_prepared_xacts ?☆☆

      查詢集群中所有節(jié)點的啟動事務(wù)信息,輔助事務(wù)超時場景下的Hang問題定位,通過查詢該視圖獲取gxid,然后結(jié)合pgxc_xacts_iscommitted(gxid)可以獲知事務(wù)是否提交。

      pgxc_running_xacts ?☆☆

      查詢集群中所有節(jié)點的運行事務(wù)信息。

      pg_locks ?☆☆

      查詢當(dāng)前實例的鎖狀態(tài),輔助死鎖等待的Hang問題定位。

      pgxc_node ?☆☆

      查詢集群中所有實例節(jié)點信息,重點關(guān)注節(jié)點的node_name, node_port, node_id。

      除過上述常用視圖,Hang問題定位過程需要根據(jù)實際場景,結(jié)合執(zhí)行計劃、gstack工具、系統(tǒng)日志等共同分析定位。

      1.2?簡單示例

      比如在執(zhí)行create table的時候疑似發(fā)生hang,那么我們可以執(zhí)行以下操作定位問題

      1.?獲取疑似hang的SQL的query_id

      select * from pgxc_stat_activity where state = ‘a(chǎn)ctive’ and lower(query) like ‘create table %’;

      2.?獲取此作業(yè)的線程等待關(guān)系

      select * from pgxc_thread_wait_status where query_id = xx;

      xx:為上一步獲取的疑似hang的SQL的query_id值

      分析此query_id相關(guān)的線程的狀態(tài)(字段wait_status),查看是否有acquire lock狀態(tài)的線程,找到其node_name?和 tid字段

      3.?到對應(yīng)的node_name上獲取鎖信息

      execute direct on (xx) ‘select * from pg_locks where pid?=?xxx’;

      --xx: 上一步獲取的node_name字段的值

      --yy:上一步獲取的tid字段值。

      獲取等待加鎖的表信息(字段relation)

      4.到對應(yīng)的node_name上獲取此表的持鎖信息

      execute direct on (xx) ‘select * from pg_locks where relation?=?yy?and granted = true’;

      --xx: 第二步獲取的node_name字段的值

      --yy: 第三步獲取的等待加鎖字段的值

      獲取持鎖的線程(字段pid)

      5.獲取持鎖的作業(yè)信息

      select * from pgxc_stat_activity where pid=xx;

      --xx: 第四步獲取持鎖線程信息

      字段query的內(nèi)容即為持鎖線程信息,也是阻塞create table語句的作業(yè)信息

      2?Hang問題分類

      客戶側(cè)感知的hang分為三種

      1.?真實hang

      一般是輕量級鎖缺陷、執(zhí)行鏈路環(huán)狀或者死循環(huán)執(zhí)行。這種場景下作業(yè)永遠(yuǎn)無法執(zhí)行完

      2.?執(zhí)行慢:

      業(yè)務(wù)執(zhí)行慢,遠(yuǎn)遠(yuǎn)超出客戶的預(yù)期,客戶側(cè)產(chǎn)生hang的認(rèn)知效果。這種問題最終需要通過調(diào)優(yōu)解決

      3.?鎖等待:

      因搶占不到鎖資源,導(dǎo)致作業(yè)排隊等待加鎖。這種場景的表現(xiàn)是要么作業(yè)執(zhí)行時間邊長,要么等待一段時間(一般為20min)之后報鎖超時的失敗信息

      根據(jù)以往的經(jīng)驗,局點常見的hang問題有以下幾種

      3?Hang問題定位方法及解決措施

      3.1?基本步驟

      Step1. cm_ctl query查詢集群當(dāng)前狀態(tài),確保集群狀態(tài)正常;

      Step2. gsql連接數(shù)據(jù)庫,執(zhí)行select * from pgxc_stat_activity,查詢目標(biāo)查詢的query_id,有時候可以增加where state = ‘a(chǎn)ctive’篩選活躍SQL;

      Step3. 執(zhí)行select * from pgxc_thread_wait_status?where query_id = xxx,查詢集群全局與之關(guān)聯(lián)的所有線程的層次調(diào)用關(guān)系及阻塞等待情況。自上而下,逐層分析,確定疑似阻塞節(jié)點及線程信息,甚至,可以繪制線程等待關(guān)系圖,更加直觀地分析當(dāng)前Hang問題的根因。除此,可結(jié)合執(zhí)行計劃或gstack查看線程堆棧,進一步佐證定位結(jié)論。

      Step4. 如果Step3仍無定論,則針對其他常見Hang場景(目前以鎖等待和通信收發(fā)等待最為常見),結(jié)合2.1節(jié)相應(yīng)視圖,進一步分析定位:

      a)?鎖等待:從Step3的查詢結(jié)果分析線程等待關(guān)系,如果阻塞線程狀態(tài)為acquire lock,則進一步執(zhí)行select * from pg_locks?where pid = xxx查詢阻塞線程的加鎖情況;

      b)?通信層數(shù)據(jù)收發(fā)成環(huán):從Step3的查詢結(jié)果分析線程等待關(guān)系,如果阻塞線程狀態(tài)一直為flush data: wait quota,則可能是通信層收發(fā)過程hang死,繼續(xù)執(zhí)行select * from pgxc_comm_send_stream和select * from pgxc_comm_recv_stream,可以根據(jù)Step3的查詢結(jié)果增加where條件限定node_name、remote_name、query_id、pn_id(即plevel),進一步排查wait?quota的根因是否是發(fā)送端或接收端數(shù)據(jù)流異常或者通信問題等。

      任務(wù)調(diào)度 數(shù)據(jù)倉庫服務(wù) GaussDB(DWS) SQL

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(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)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:excel表格分?jǐn)?shù)怎么打教程(excel表格怎么輸入分?jǐn)?shù))
      下一篇:利用Excel函數(shù)生成隨機數(shù)實例教程
      相關(guān)文章
      国产精品亚洲а∨天堂2021| 亚洲第一页综合图片自拍| 亚洲色欲色欲www在线播放| 亚洲A∨无码一区二区三区| 亚洲人成色77777在线观看大 | 亚洲国产精品无码久久九九大片| 内射干少妇亚洲69XXX| 日韩亚洲一区二区三区| 亚洲中文久久精品无码| 国产成人亚洲综合无码| 国产99久久亚洲综合精品| 亚洲AV无码AV吞精久久| 亚洲深深色噜噜狠狠网站| 国产成人精品日本亚洲专| 亚洲一区免费视频| 亚洲午夜国产精品无卡| 91情国产l精品国产亚洲区| 亚洲无线电影官网| 亚洲精品成人网站在线播放| 亚洲久本草在线中文字幕| 亚洲综合区小说区激情区 | 亚洲小说图区综合在线| 亚洲jizzjizz在线播放久| 亚洲av乱码一区二区三区| 亚洲一区二区影视| 国产成人精品日本亚洲专区6| 亚洲一区二区三区免费在线观看| 亚洲午夜电影一区二区三区| 亚洲五月综合网色九月色| 国产成人亚洲综合一区| 亚洲精品无码专区| 国产亚洲精品仙踪林在线播放| 亚洲а∨天堂久久精品| 国产成人高清亚洲| 亚洲男人的天堂www| 久久91亚洲精品中文字幕| 亚洲白色白色永久观看| 亚洲AV成人噜噜无码网站| 亚洲欧美乱色情图片| 日韩国产欧美亚洲v片| 亚洲美女在线国产|