本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
判斷資料庫中的資料表是否需要清理
您可以使用下列查詢來顯示資料庫中未凍結交易的數量。資料庫 datfrozenxid
列的 pg_database
欄是顯示於該資料庫正常交易 ID 的下線。此欄位是資料庫內每個資料表 relfrozenxid
最小的值。
SELECT datname, age(datfrozenxid) FROM pg_database ORDER BY age(datfrozenxid) desc limit 20;
例如,執行上述查詢的結果可能如下所示。
datname | age mydb | 1771757888 template0 | 1721757888 template1 | 1721757888 rdsadmin | 1694008527 postgres | 1693881061 (5 rows)
當交易 ID 包圍的存留期觸及 20 億,則會發生交易 ID 包圍 (XID),且資料庫將變成唯獨狀態。您可使用此查詢來產生指標且一天執行數次。根據預設,自動資料清理已將交易的存留期設定為不超過 200,000,000 (autovacuum_freeze_max_age
範例監視策略可能如下所示:
-
設定
autovacuum_freeze_max_age
值到 2 億交易數目 -
如果資料表達到 5 億筆未凍結的交易, 會觸發低嚴重性警示。這並非不合理的值,但可以表示該自動資料清理並未保持啟動狀態。
-
如果資料表存留達到 10 億,這應視為採取動作的警報。一般而言,您會基於效能理由,而想讓存留期比較接近
autovacuum_freeze_max_age
。我們建議您使用下列建議調查。 -
如果資料表達到 15 億的未清理交易,則觸發高安全性警報。視資料庫使用交易的速度而定,此警報可指出系統來不及執行自動資料清理。在此情況下,我們建議您立即解決此問題。
如果資料表不斷違反這些閾值,請進一步修改自動資料清理參數。依預設,手動使用 VACUUM (已停用或以成本為基礎的延遲) 比使用預設自動資料清理更積極,但總體上對系統的干擾也更加嚴重。
我們建議下列作法:
-
請注意並開啟監控機制,如此您才會注意最舊交易的存留期。
如需建立程序以警告您交易 ID 包裝的相關資訊,請參閱 AWS 資料庫部落格文章在 Amazon RDS for PostgreSQL 中實作交易 ID 包裝的早期警告系統
。 -
對於比較忙碌的資料表,除了依賴自動資料清理以外,請在維護時段定期執行手動清理凍結。如需執行手動清理凍結的資訊,請參閱 執行手動清理凍結。