我注意到我調整的數據庫(postgres 9.2)沒有運行我感興趣的許多表的自動分析,我不明白爲什麼。我的理解/期望是基於當前的配置,autoanalyze將運行,假設表增長或修改> = 10%的行。但是,根據查詢數據庫時看到的信息,情況並非如此。自動分析不運行Postgres 9.2數據庫中的所有表
下面是從一個數據庫上pg_stat_sys_tables和pg_stat_all_tables一個已經在督促一年多運行用於運行查詢的結果集(結果截斷和真正的表名刪節)
┌────────────────────┬────────────────────────────────────┬──────────────────┬───────────────────┐
│ relname │ last_autovacuum │ autovacuum_count │ last_autoanalyze │ autoanalyze_count │
├────────────────────┼─────────────────┼──────────────────┼──────────────────┼───────────────────┤
│ a_large_table │ ¤ │ 0 │ ¤ │ 0 │
│ table_a │ 2014-04-01 │ 1 │ 2014-04-01 │ 1 │
│ table_b │ 2014-04-01 │ 1 │ 2014-04-01 │ 1 │
│ a_very_large_table │ ¤ │ 0 │ ¤ │ 0 │
└────────────────────┴─────────────────┴──────────────────┴──────────────────┴───────────────────┘
注意,表-A和表-B經常清理了舊數據,所以最近這些應用程序會進行autovacuum/autoanalyze,這是有道理的。不過,我也希望最近至少還能分析其他大型表格。
良好的措施,這裏的在postgresql.conf ...
#------------------------------------------------------------------------------
# AUTOVACUUM PARAMETERS
#------------------------------------------------------------------------------
autovacuum = on
log_autovacuum_min_duration = 1000
autovacuum_max_workers = 3
autovacuum_naptime = 1min
autovacuum_vacuum_threshold = 100
autovacuum_analyze_threshold = 100
autovacuum_vacuum_scale_factor = 0.2
autovacuum_analyze_scale_factor = 0.1
autovacuum_freeze_max_age = 200000000
autovacuum_vacuum_cost_delay = 20ms
autovacuum_vacuum_cost_limit = -1
你有是在'在打開的連接交易狀態? (你可以通過'pg_stat_activity'查看) –
是的。我在那個視圖上尋找什麼? –
在事務'狀態中的連接保持阻止自動清除刪除死行的鎖(因爲它們沒有死,這些事務仍然看到它們)。你需要確保你用'commit'結束所有事務。你應該只在''狀態有連接。那些不會阻止autovacuum執行其工作 –