İstatistikleri bayatlamış tabloları bul (ANALYZE stratejisi)
PostgreSQLBakımKomut
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).