GaussDB(DWS)實例長期處于catchup問題分析

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

      主、備、從高可用架構(gòu)

      主、備、從數(shù)據(jù)發(fā)送的邏輯圖:

      圖1-DN高可用架構(gòu)

      如圖1所示,DN主備實例采用強同步模式,保證主機故障時備機有一份完整數(shù)據(jù)對外提供服務(wù)。當主備從均正常時,數(shù)據(jù)只發(fā)送給備機,從備空閑,從備正常狀態(tài)下不提供服務(wù),備機down掉之后主機還是提供寫服務(wù),將數(shù)據(jù)備份發(fā)送至從備。

      主備同步原理

      保證主備實例數(shù)據(jù)強一致性依賴數(shù)據(jù)同步機制,主要分為日志同步與數(shù)據(jù)頁同步,如圖2所示,WalSend與DataSend在主機實例上運行分別負責發(fā)送日志文件與數(shù)據(jù)頁發(fā)送至備機或從備(在備機故障情況下發(fā)送至從備),WalReceiver與DataReceiver,在備機或從備實例運行負責接收后并有對應(yīng)線程將其落盤達到數(shù)據(jù)強一致。

      圖2-主備實例數(shù)據(jù)同步框架

      日志同步

      主機記錄XLOG后,會定期寫到磁盤上,WalSend線程會讀取磁盤上日志,通過TCP網(wǎng)絡(luò)發(fā)送給備機WalReceiver線程,該線程接收后會寫到一個內(nèi)存隊列中,WalRecWriter線程定時從隊列里取出來寫盤,并更新備機寫盤LSN,WalReceiver線程回復(fù)主機消息時把改值發(fā)送給主機。恢復(fù)日志線程定期讀取磁盤上XLOG對日志進行REDO。

      數(shù)據(jù)頁同步

      主備數(shù)據(jù)同步通過XLOG事務(wù)日志同步。在大量寫事務(wù)場景下,會產(chǎn)生大量的XLOG日志,主機需要先將XLOG下盤,然后日志同步進程讀取XLOG發(fā)送給備機,備機收到XLOG日志后下盤,然后恢復(fù)進程讀取日志進行REDO。這個過程主備一共有兩次寫IO和兩次讀IO請求。

      在OLAP場景中,普遍數(shù)據(jù)量都很大,并且很多場景往往只需要查詢某張表中的某一列數(shù)據(jù),這樣通常采用列式存儲格式。不僅有利于性能提升,并且按列存儲,數(shù)據(jù)格式一樣,非常利于壓縮,節(jié)省存儲空間。由于按列存儲時,如果再按行存儲方式去導入一行記錄一條日志,那么性能將非常慢,如果沒有日志,將無法實現(xiàn)主備同步目的,因此需要探求一種新的數(shù)據(jù)同步方式。

      基于上面兩個方面考慮,我們設(shè)計了數(shù)據(jù)復(fù)制通道,即數(shù)據(jù)導入到DN后,組成一個個最小存儲單元(行存按頁面大小8K為單位,列存按CU大小8K為單位),然后發(fā)送給備機,備機接收到后,將數(shù)據(jù)寫盤,并回復(fù)主機寫盤數(shù)據(jù)邏輯位置(主機發(fā)送時,給每個數(shù)據(jù)單元設(shè)置一個uint64位單調(diào)遞增的偏移位置,類似于XLOG中的LSN),主機在事務(wù)提交前,如果該事務(wù)要求寫盤數(shù)據(jù)已經(jīng)傳輸給備機那么即可提交。

      圖3-數(shù)據(jù)頁同步流程

      數(shù)據(jù)復(fù)制只有在行存批量導入數(shù)據(jù)和列存導入數(shù)據(jù)時觸發(fā),如圖3所示,數(shù)據(jù)導入后,存儲層將多個數(shù)據(jù)tuple組成一個個數(shù)據(jù)最小存儲單元,并將其發(fā)到發(fā)送隊列中,DataSend線程將從發(fā)送隊列中取數(shù)據(jù)通過TCP網(wǎng)絡(luò)發(fā)送給備機DataReceiver線程,該線程接收數(shù)據(jù)后會寫到一個內(nèi)存隊列中,由DataRecWriter線程從隊列中讀取并解析出每個數(shù)據(jù)單元寫盤,并更新寫盤邏輯偏移位置,在DataReceiver回復(fù)主機消息時將該值發(fā)送給主機。數(shù)據(jù)復(fù)制過程中數(shù)據(jù)直接由DataRecWriter寫盤,不需要恢復(fù)日志線程去恢復(fù)數(shù)據(jù)。

      注:主備同步常用視圖:

      select * from pgxc_get_senders_catchup_time();

      主備同步常見問題

      場景一:業(yè)務(wù)慢,集群狀態(tài)長時間有catchup

      【問題描述】

      業(yè)務(wù)變慢,查看集群狀態(tài)多對實例處于catchup狀態(tài)

      【機制說明】

      該場景下catchup原因一般都是由于某些業(yè)務(wù)在短時間內(nèi)產(chǎn)生較多xlog文件,主備同步不及時,此時主備同步有排隊情況影響事務(wù)提交導致業(yè)務(wù)出現(xiàn)比較卡的現(xiàn)象。

      造成該問題主要有帶索引導入、頻繁delete、頻繁truncate、update導致,此時需要解析xlog查看對應(yīng)操作以及相關(guān)業(yè)務(wù)表。

      對于此類問題我們主要任務(wù)是通過解析xlog找出對應(yīng)表讓業(yè)務(wù)側(cè)溝通進行整改。

      【問題分析】

      進入某一catchup實例路徑,使用pg_xlogdump解析其中一個xlog文件: pg_xlogdump $xlog_filename

      帶索引導入場景:

      頻繁delete或delete整張表場景:

      2、通過解析xlog當中database與表對應(yīng)OID解析該表所在庫以及對應(yīng)表名,以便業(yè)務(wù)側(cè)排查

      對應(yīng)庫與表OID如上紅框所示,連接對應(yīng)DN通過以下命令查到該表對應(yīng)數(shù)據(jù)庫、schema與表名

      select * from pg_database where oid = xxxx;

      select * from pg_class where relfilenode = xxxx;

      select * from pg_namespace where oid = xxxx

      注:若確定進入庫沒有問題,對應(yīng)表在pg_partition或pg_class中都找不到,說明該表被刪除或正在創(chuàng)建事務(wù)還未提交可執(zhí)行以下命令后查詢(該只讀事務(wù)在退出當前會話后會自動回滾):

      start transaction read only;

      set enable_show_any_tuples = true;

      set enable_indexscan = off;

      set enable_bitmapscan = off;

      【問題結(jié)論&&建議】

      1、帶索引表入庫產(chǎn)生大量xlog日志同步不及時導致catchup,影響事務(wù)提交引起業(yè)務(wù)卡。

      2、建議入庫前刪除索引,入庫完成后進行索引重建。

      3、業(yè)務(wù)側(cè)盡量避免對單張表進行頻繁update、delete、truncate操作。

      場景二:集群狀態(tài)長時間處于catchup狀態(tài)(超過24小時)

      【問題描述】

      查看集群狀態(tài)或查看追趕視圖長時間(超過24小時甚至更長時間)有實例處于catchup狀態(tài)

      【問題分析】

      問題定界:查看主實例日志是否有鎖超時日志,若主實例有相關(guān)超時日志說明為此場景,按照問題修復(fù)方案整改即可。

      【問題修復(fù)】

      出現(xiàn)該問題是由于catchup與dml語句搶鎖導致,主實例鎖超時日志會打印搶鎖語句,此時kill正在執(zhí)行的dml語句即可(關(guān)注最新鎖超時語句即可),繼續(xù)觀察主實例日志確保無鎖超時日志說明是正常情況等待catchup結(jié)束即可;若kill業(yè)務(wù)后頻繁有所超時日志建議與客戶協(xié)商停止業(yè)務(wù)讓catchup做完,不然可能會與新進來的業(yè)務(wù)一直搶鎖導致catchup無法結(jié)束。

      排查步驟如下:

      1、確認catchup以及主實例:

      cm_ctl query –Cvd|grep Catchup

      查詢集群實例catchup狀態(tài)如下:

      1 10-x-179-67 6001 /srv/BigData/mppdb/data1/master1 P Primary Normal | 2 10-x-179-95 6002 /srv/BigData/mppdb/data1/slave1 S Standby Catchup|

      3? ASG003? 3002 /srv/BigData/mppdb/data1/dummyslave1 R Secondary Normal

      2? 10-x-179-95 6007 /srv/BigData/mppdb/data2/master2???? P Primary Normal | 1? 10-x-179-67 6008 /srv/BigData/mppdb/data1/slave2????? S Standby Catchup |

      3? ASG003 3005 /srv/BigData/mppdb/data2/dummyslave2 R Secondary Normal

      根據(jù)以上結(jié)果catchup實例為6002,對應(yīng)主實例為6001。

      2、查看對應(yīng)主實例日志

      使用omm用戶登錄6001實例所在節(jié)點加載環(huán)境變量后進入日志目錄:

      cd $GAUSSLOG/dn_6001

      3、在最新日志文件查看catchup線程號:

      grep "catchup" postgresql-2021-xxx.log

      查看catchup線程啟動日志如下:

      2020-07-30 11:26:58.666 5f20d1aa.3012 [unknown] 281454775105184 [unknown] 0 dn_6001_6002 00000 0 [BACKEND] LOG: ?catchup process start to search all bcm files.

      2020-07-30 11:57:25.874 5f20d1aa.3012 [unknown] 281454775105184 [unknown] 0 dn_6001_6002 00000 0 [BACKEND] LOG: ?catchup process start to search all bcm files.

      4、使用catchup線程查看是否有鎖超時信息

      grep "281454775105184" postgresql-2021-xxx.log

      查看catchup線程啟動日志如下:

      2020-07-30 11:03:34.275 5f20d1aa.3012 [unknown] 281454775105184 [unknown] 0 dn_6001_6002 00000 0 [BACKEND] LOG: ?catchup process start to search all bcm files.

      GaussDB(DWS)實例長期處于catchup問題分析

      2020-07-30 11:26:57.558 5f20d1aa.3012 [unknown] 281454775105184 [unknown] 0 dn_6001_6002 00000 0 [BACKEND] LOG: ?thread 281454775105184 still waiting for ExclusiveLock on relation 18486641 of database 112877 after 1200000.124 ms

      2020-07-30 11:26:57.558 5f20d1aa.3012 [unknown] 281454775105184 [unknown] 0 dn_6001_6002 YY003 0 [BACKEND] ERROR: ?Lock wait timeout: thread 281454775105184 on node dn_6041_6042 waiting for ExclusiveLock on relation 18486641 of database 112877 after 1200000.124 ms

      2020-07-30 11:26:57.558 5f20d1aa.3012 [unknown] 281454775105184 [unknown] 0 dn_6001_6002 YY003 0 [BACKEND] DETAIL: ?blocked by hold lock thread 281420014876320, statement

      2020-07-30 11:26:58.666 5f20d1aa.3012 [unknown] 281454775105184 [unknown] 0 dn_6001_6002 00000 0 [BACKEND] LOG: ?catchup process start to search all bcm files.

      如上結(jié)果主實例日志最近時間存在Lock wait日志

      鎖超時日志下一條日志為對應(yīng)持鎖業(yè)務(wù)如下:

      ERROR: ?Lock wait timeout: thread 281454775105184 on node dn_6041_6042 waiting for ExclusiveLock on relation xxof database xx after xx ms

      DETAIL: ?blocked by hold lock thread 281420014876320, statement , hold lockmode RowExclusiveLock.

      4、連接CN查看活躍語句視圖找出持鎖業(yè)務(wù):

      select * from pgxc_stat_activity where query like '%$table_name%';

      5、與客戶協(xié)商后停掉該業(yè)務(wù):

      select pg_terminate_backend($pid);---$pid值見第上一步查詢結(jié)果

      6、繼續(xù)觀察主實例日志沒有鎖超時日志即可說明在正常同步等待即可,若還存在鎖超時日志繼續(xù)排查即可

      總結(jié):

      1)其他報錯場景:

      物理文件損壞:

      WARNING invalid page in block xxxx

      ERROR:remote read failed from xxx

      BCM文件殘留:

      ERROR: could not open file "base/xx/xxx":No such file or directory

      2)此問題觸發(fā)原理:

      拉起catchup線程同步數(shù)據(jù)頁 -> 數(shù)據(jù)頁面加鎖 -> 主機datasender讀取頁面并發(fā)送 -> 備機datareceiver接收

      拉起catchup線程同步數(shù)據(jù)頁 -> 加鎖失敗 -> 讀取頁面失敗 -> 備機datareceiver接收

      GaussDB(DWS)高可用之數(shù)據(jù)復(fù)制

      GaussDB(DWS)高可用之備機重建

      GaussDB(DWS)高可用之主備從HA技術(shù)

      EI企業(yè)智能 Gauss AP 數(shù)據(jù)倉庫服務(wù) GaussDB(DWS)

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

      上一篇:Excel表格中怎樣給折線圖上添加數(shù)據(jù)標簽(excel表格中折線圖數(shù)據(jù)標簽怎么單個設(shè)置)
      下一篇:【云駐共創(chuàng)】程序員解憂鋪來啦
      相關(guān)文章
      亚洲区视频在线观看| 久久99亚洲网美利坚合众国| 久久精品国产亚洲av水果派| 成人亚洲国产精品久久| 国产亚洲中文日本不卡二区| 亚洲中文字幕在线无码一区二区 | 亚洲 国产 图片| 亚洲精品欧美综合四区| 亚洲欧美日韩久久精品| 亚洲熟女www一区二区三区| 久久精品国产亚洲av麻豆蜜芽 | 2048亚洲精品国产| 亚洲国产天堂久久综合| 亚洲av午夜成人片精品电影| 国产亚洲综合久久| 亚洲av手机在线观看| 亚洲色偷偷狠狠综合网| 国产亚洲美日韩AV中文字幕无码成人| 亚洲精品视频在线看| 亚洲中文无韩国r级电影 | 久久亚洲欧洲国产综合| 亚洲熟妇无码八AV在线播放| 亚洲成AV人片在线播放无码| 亚洲成人动漫在线| 亚洲成a人片在线观| 亚洲五月丁香综合视频| 亚洲丰满熟女一区二区哦| 午夜亚洲乱码伦小说区69堂| 亚洲精品亚洲人成在线观看下载| 亚洲麻豆精品国偷自产在线91| 亚洲国产成人VA在线观看| 久久青青草原亚洲av无码| 久久精品夜色国产亚洲av| 亚洲韩国在线一卡二卡| 亚洲a∨无码男人的天堂| 亚洲小说图区综合在线| 亚洲国产成人久久精品99| 中文亚洲AV片在线观看不卡| 亚洲2022国产成人精品无码区| 亚洲综合色一区二区三区小说| 亚洲人成伊人成综合网久久|