Ayarladığım bir veritabanının (postgres 9.2), ilgilendiğim pek çok tablo için autoanalyze çalıştırılmadığını fark ettim ve nedenini tam olarak anlamadım . Anlayışım/beklentilerim mevcut konfigürasyona dayanarak, autoanalyze tablonun büyümesini veya satırların>% 10'u tarafından değiştirildiğini varsayarak çalışacaktır. Ancak, bu, veritabanını sorgularken gördüğüm bilgilere göre durum böyle değil. İşte Otomatik analiz Postgres 9.2 veritabanındaki tüm tablolar için çalışmıyor
bir yıldan fazla eşya yürütüyor bir veritabanı üzerinde pg_stat_all_tables ile bir sorgu yapmayı sonuçların bir dizi var┌────────────────────┬────────────────────────────────────┬──────────────────┬───────────────────┐
│ 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 │
└────────────────────┴─────────────────┴──────────────────┴──────────────────┴───────────────────┘
Not table_a ve table_b sık olan (sonuçlar kesildi ve gerçek tablo adları Redacted) Eski verilerin temizlenmesinden dolayı, bunların yakın zamanda bir oto-vakum/otoanalize sahip olacağı anlaşılmaktadır. Bununla birlikte, diğer büyük tabloların da en azından yakın zamanda analiz edilmesini bekliyordum. Iyi ölçmek için
, burada ... postgresql.conf var
#------------------------------------------------------------------------------
# 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
Eğer ' yılında bulunan açık bağlantıları var mı işlem devleti? (Bunu "pg_stat_activity" görünümünde kontrol edebilirsiniz) –
Evet. Bu görüşe özel olarak ne arıyorum? –
"" durumunda bağlantılarda, autovacuum'un ölü satırları kaldırmasını engelleyen kilitleri tutun (çünkü ölmedikleri için, bu işlemler hala onları görmeye devam ediyor). Tüm işlemleri "commit" ile bitirdiğinizden emin olmalısınız. Sadece 'durumunda bağlantılarınız olmalıdır. Autovacuum işini –