判斷自動資料清理目前是否執行中且執行多久時間 - Amazon Relational Database Service

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

判斷自動資料清理目前是否執行中且執行多久時間

如果您需要手動清理資料表,請判斷目前是否在執行自動資料清理功能。如果是,您可能需要調整參數,使其更有效率地執行,或暫時關閉自動清空,以便手動執行 VACUUM。

使用以下查詢來判斷自動資料清理是否執行中、已執行多久時間,以及是否正等待另一個工作階段。

SELECT datname, usename, pid, state, wait_event, current_timestamp - xact_start AS xact_runtime, query FROM pg_stat_activity WHERE upper(query) LIKE '%VACUUM%' ORDER BY xact_start;

在執行此查詢之後,您應會看到類似底下的輸出:

datname | usename | pid | state | wait_event | xact_runtime | query --------+----------+-------+--------+------------+-------------------------+-------------------------------------------------------------------------------------------------------- mydb | rdsadmin | 16473 | active | | 33 days 16:32:11.600656 | autovacuum: VACUUM ANALYZE public.mytable1 (to prevent wraparound) mydb | rdsadmin | 22553 | active | | 14 days 09:15:34.073141 | autovacuum: VACUUM ANALYZE public.mytable2 (to prevent wraparound) mydb | rdsadmin | 41909 | active | | 3 days 02:43:54.203349 | autovacuum: VACUUM ANALYZE public.mytable3 mydb | rdsadmin | 618 | active | | 00:00:00 | SELECT datname, usename, pid, state, wait_event, current_timestamp - xact_start AS xact_runtime, query+ | | | | | | FROM pg_stat_activity + | | | | | | WHERE query like '%VACUUM%' + | | | | | | ORDER BY xact_start; +

有幾個問題可能造成長時間執行自動資料清理階段 (長達數天)。最常見的問題就是資料表大小或更新率的 maintenance_work_mem 參數值設得太低。

建議您依照下列公式來設定 maintenance_work_mem 參數值。

GREATEST({DBInstanceClassMemory/63963136*1024},65536)

短時間執行的自動資料清理工作階段也可以指出問題:

  • 它可指出您的工作負載沒有足夠的 autovacuum_max_workers。在此情況下,您需要指出工作者數目。

  • 它可指出有索引損毀 (自動資料清理會當機並以相同的關聯重新啟動,但沒有任何進度)。在這種情況下,請手動執行 vacuum freeze verbose table 來查看確切原因。