Postgresql
何時分析列?
我有一張包含數百萬條記錄的表。在選擇之前,我執行分析表 (col1, col2)。
我們想要降低成本,因為很多 IO 操作都發生在 AWS Aurora 中。
我是否應該僅在我們知道數據發生重大變化時才執行分析?或者它是否總是需要執行,即使只有一些數據發生了變化?
通常,您不需要
ANALYZE
自己執行。這是由 autovacuum 自動完成的。如果您發現在某些情況下您的統計數據不夠好,您應該為受影響的表調整自動分析,以便它更頻繁地執行或收集更多數據。
PostgreSQL 根據 autovacuum_analyze_threshold 和 autovacuum_analyze_scale_factor 的設置自動分析表。正常情況下,表翻10%時會自動分析表。如果這還不夠,最好更改這些設置而不是不斷手動執行 ANALYZE。
但是在某些情況下,自動系統無法正常工作。
- 您剛剛創建了一個表達式索引。
- 您剛剛使用
CREATE STATISTICS
.- 您剛剛設置
statistics
或n_distinct
使用ALTER TABLE ALTER COLUMN col_name ...
.- 你剛剛改變了
default_statistics_target
。- 這是一張
TEMPORARY
桌子。其他會話(包括 autovacuum “會話”)無法看到臨時表。此外,如果您剛剛完成某種批量更新或批量導入,則應該自動分析該表,但您可能不想等待它啟動然後完成。如果您想在繼續之前確定它已經完成,那麼手動執行 VACUUM ANALYZE 是有意義的。