2014-04-01 18 views
5

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 
+0

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) –

+0

Evet. Bu görüşe özel olarak ne arıyorum? –

+0

"" 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 –

cevap

0

Bu dizilerini% 10'u değiştiği zaman vakum analiz edilmelidir tablolar gibi görünüyor.

  • mi Autovacuum çalışan: yöneltilen postgresql.conf ayarına kontrol etmek

    autovacuum analyze threshold = 100 + 0.1 * table size before vacuum 
    

    Diğer şeyler Tabanlı? ps -ef | grep vacuum

  • Eğer

Ölçeğinde Gabrielle Roth'un Autovacuum konuşma slaytları bak bir bekleme veya köle sunucuda kontrol etmiyor emin olun: https://wiki.postgresql.org/images/b/b5/Groth_scale12x_autovacuum.pdf

İlgili konular