openGauss/MogDB的uncommitted xmin問題解決

T1YSL發表於2022-12-12

一、問題現象

在測試openGauss/MogDB的時候,發現主庫查詢snapshot.tables_snap_timestamp這個表的時候,一select *,資料庫就當機,而備庫是正常的。因為是測試環境不存在資料量太多的情況。所以最開始初步懷疑有資料頁損壞了。
image.png image.png
在分析的時候,因為是測試環境使用了vacuum full去測試( 正常使用vacuun freeze應該就可以)。
企業微信截圖_16696231952582.png
報錯為 ERROR: uncommitted xmin 21506 from before xid cutoff 51237 needs to be frozen

透過返回結果猜測資料庫在已經不允許執行事務的情況下被回滾的, 所以顯示為 uncommitted xid
根據vacuum full提示,它跳過了pg_type表,並且建議我們用 maintenance模式去vavuum full處理它。
此外我們根據提示的xmin可以找到對應的是pg_type以及兩個索引。
image.png
image.png

二、問題解決

maintenance模式類似於PostgreSQL的單使用者模式。但是比較好的一點是,MogDB/openGauss的maintenance模式不需要PostgreSQL那樣需要停掉PostgreSQL資料庫再去使用。關於PostgreSQL的單使用者模式可以參考我這一篇 

1.使用maintenance模式連線資料庫

以下兩種方法均可。

方式一

gsql -d postgres -p 26000-r -m

方式二

gsql -d postgres -p 26000 -r
連線成功後,執行如下命令:
set xc_maintenance_mode=on;

2.使用vacuum freeze/vacuum full處理該系統表

正常使用vacuun freeze應該就可以
image.png

再使用正常方式登入,去查詢這個表。問題得以解決。
image.png


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2927704/,如需轉載,請註明出處,否則將追究法律責任。

相關文章