DBAtlas · Veritabanı operasyon atlası

İstatistikleri bayatlamış tabloları bul (ANALYZE stratejisi)

PostgreSQLBakım

Komut

SELECT schemaname,
       relname AS table_name,
       n_live_tup,
       n_mod_since_analyze,
       round(100.0 * n_mod_since_analyze / NULLIF(n_live_tup, 0), 1) AS mod_pct,
       greatest(last_analyze, last_autoanalyze) AS last_analyzed,
       round(current_setting('autovacuum_analyze_threshold')::int
             + current_setting('autovacuum_analyze_scale_factor')::numeric * n_live_tup) AS autoanalyze_at
FROM pg_stat_user_tables
WHERE n_mod_since_analyze > 0
ORDER BY mod_pct DESC NULLS LAST
LIMIT 20;

-- Toplu yükleme sonrası autovacuum'u beklemeden
ANALYZE (VERBOSE) siparis;

Ne yapar?

Son ANALYZE'dan bu yana değişen satır sayısını, canlı satıra oranını ve autovacuum'un ANALYZE'ı tetikleyeceği yaklaşık değişiklik eşiğini gösterir.

Ne zaman kullanılır?

Toplu yükleme/silme sonrası, yanlış satır tahminli planlar görüldüğünde veya autoanalyze'ın büyük tablolarda geç kaldığından şüphelenildiğinde.

Dikkat

Hesaplanan eşik global ayarlara göredir; tabloya özel autovacuum_analyze_* reloptions tanımlıysa (pg_class.reloptions) gerçek eşik farklıdır. Büyük tablolarda varsayılan scale_factor (0.1) çok geç tetikler; tablo bazında düşür. Partitioned tabloların parent'ı autovacuum tarafından ANALYZE edilmez; parent düzeyi istatistik için elle ANALYZE gerekir. Temp tablolar autovacuum görmez. ANALYZE örneklem okur ve ShareUpdateExclusiveLock alır (DML'i bloklamaz).

DBAtlas'ta aç →

İlgili