Postgresql
在所有符合特定條件的表上執行 VACUUM
我有一個包含 100 多個表的大型數據庫。其中一些表太大了,在它們上執行 VACUUM 需要幾個小時,所以我不想在這些表上執行它。有什麼方法可以使用動態表列表執行 VACUUM,即如下所示?
VACUUM (SELECT table_name FROM information_schema.tables WHERE table_name not in ['list', 'of', 'big', 'tables'])
當然可以手動列出所有表名,但理想情況下我希望有一種動態的方法。
…表太大了,在它們上執行 VACUUM 需要幾個小時,所以我不想在這些表上執行它。
這實際上可能適得其反。
你說 VACUUM 需要幾個小時,但它實際上有什麼作用嗎?它會從表中刪除任何元組嗎?
如果對該表進行了大量事務更新,則必須在一段時間內清除“死”行(通過 VACUUM’ing)。如果你不這樣做,那麼你的應用程序的性能將開始迅速走下坡路,因為 PostgreSQL 必須在越來越多的死行中導航。
您正在執行哪個版本的 PostgreSQL?你可能會發現它正在自動為你做 VACUUM’ing。
如果您仍然想這樣做,那麼編寫一個查詢來“選擇” VACUUM 語句,將它們假離線到一個文件中並將該文件作為 SQL 執行:
select 'vacuum ' || table_name || ';' ddl from information_schema.tables where ...