Postgresql
如果 autovacuum 開啟,我應該手動 VACUUM PostgreSQL 數據庫嗎?
我使用製作大型 PostgreSQL 數據庫的軟體(其中有一個包含一百萬行的表),開發人員說我應該
VACUUM
定期ANALYZE
進行。但是 PostgreSQL 數據庫預設是autovacuum
打開的。我應該抽真空/分析嗎?有什麼好處?自動吸塵器和手動吸塵器有什麼區別
例如,在 Pgadmin3 中,我有這個:
我同意 ETL 的觀點,即沒有簡短的答案。大小並不是唯一重要的事情——我們在重負載下執行相當大的 PostgreSQL OLTP 數據庫(一些表 > 100.000.000 行),目前我們只依賴 autovacuum。
然而,有兩件事對我來說似乎很重要:
- 似乎有一個共識,那就是永遠不應該關閉 autovacuum,除非您的數據庫上有非常明確的工作負載並且您確切地知道自己在做什麼。但是,自然地,您可以進行額外
VACUUM
的和/或ANALYZE
執行。- 在考慮額外
VACUUM
的執行之前,我會檢查 autovacuum 是如何跟上的。pg_stat_user_tables
您可以通過查詢和來檢查是否有任何表超出了 autovacuum 門檻值pg_class
。我在另一個執行緒上發布了這樣一個查詢,這可能很有趣:Aggressive Autovacuum on PostgreSQL。不幸的是,對自動分析門檻值進行類似的檢查並不容易(即目前不可能)。但是,預設情況下,自動分析早在自動真空之前就開始了,而且便宜得多。因此,基本上,如果您的數據庫可以跟上 autovacuum 的速度,那麼使用 autoanalyze 也可能沒問題。最後的自動分析日期也可以從 中查詢
pg_stat_user_tables
。(最優秀的)PostgreSQL 文件的某些部分,我發現它們很有幫助: