判斷資料庫中的資料表是否需要清理 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

判斷資料庫中的資料表是否需要清理

您可以使用下列查詢來顯示資料庫中未凍結交易的數量。資料庫 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 (已停用或以成本為基礎的延遲) 比使用預設自動資料清理更積極,但總體上對系統的干擾也更加嚴重。

我們建議下列作法: