2pc殘留類問題
更新時間 2025-02-05 09:37:34
最近更新時間: 2025-02-05 09:37:34
分享文章
本頁介紹天翼云TeleDB數據庫2pc殘留類問題。
2pc殘留問題問題
問題描述
2pc為兩階段提交,正常運行也會有兩階段提交事務,大量分布式事務并行執行,可能會造成2pc事務堆積,數據庫響應變慢等問題;而操作系統故障、實例節點異常重啟等都可能會造成2pc事務殘留,2pc殘留會導致訪問到該事務相關的SQL卡住,一直處理等待狀態,影響業務運行,因此當有2pc殘留時須盡快清理,正常情況Center可以定時發起2pc殘留事務清理動作,當遇到一些異常情況時,2pc殘留任務未發起或清理失敗,會導致2pc殘留下來,進一步阻塞相關SQL執行。
可能影響
- 可能會導致部分SQL執行一直處理等待狀態,通過pg_blocking_pids(pid)返回pid為0,則表示事務被2pc兩階段事務阻塞;
- 可能會導致節點啟動失敗。
解決步驟
- 2pc是在每個CN主節點上各自管理,需要在每個CN主節點上執行
- 執行2pc殘留檢查SQL:
select pg_clean_check_txn();
返回結果如:
pg_clean_check_txn
-----------------------------------
(_$XC$1017222:cn001:F:2:0,test,TXN_STATUS_ABORTED,"cn001 :TXN_STATUS_INITIAL+
cn002 :TXN_STATUS_INITIAL +
dn001 :TXN_STATUS_PREPARED +
dn002 :TXN_STATUS_PREPARED")
(_$XC$1017223:cn001:F:2:0,test,TXN_STATUS_ABORTED,"
cn001 :TXN_STATUS_INITIAL+
cn002 :TXN_STATUS_INITIAL +
dn001 :TXN_STATUS_PREPARED +
dn002 :TXN_STATUS_PREPARED")
(2 rows)
- 在檢查有2pc殘留的CN節點上清理SQL:
select pg_clean_check_txn();
- 上述這方法通常可以清理掉2pc殘留,還有可能在清理時提示pg_xact或pg_commit_ts文件失敗的問題,可參考文檔補全缺失文件后再執行2pc清理SQL。