DBAtlas · Veritabanı operasyon atlası

auto_explain ile yavaş sorguların execution plan'ını logla

PostgreSQLPerformans

Komut

-- 1) Oturum bazında: anında etkin, restart gerekmez (superuser)
LOAD 'auto_explain';
SET auto_explain.log_min_duration = '500ms';
SET auto_explain.log_analyze = on;
SET auto_explain.log_buffers = on;
SET auto_explain.log_timing = off;
SET auto_explain.log_nested_statements = on;

-- 2) Kalıcı: yeni oturumlarda yüklenir, reload yeterli.
--    auto_explain.* parametrelerini ALTER SYSTEM ile yazabilmek için modül önce bu oturumda LOAD edilmeli.
LOAD 'auto_explain';
ALTER SYSTEM SET session_preload_libraries = 'auto_explain';
ALTER SYSTEM SET auto_explain.log_min_duration = '2s';
ALTER SYSTEM SET auto_explain.log_analyze = on;
ALTER SYSTEM SET auto_explain.log_buffers = on;
ALTER SYSTEM SET auto_explain.log_timing = off;
ALTER SYSTEM SET auto_explain.sample_rate = 0.1;
SELECT pg_reload_conf();

Ne yapar?

Eşiği aşan sorguların execution plan'ını (log_analyze ile gerçek satır sayıları ve buffer bilgisiyle) sunucu loguna yazar; uygulamanın gerçek parametreleriyle oluşan planı yakalar.

Ne zaman kullanılır?

Sorgu yalnızca uygulamada veya belirli parametrelerle yavaşlıyor ve elle EXPLAIN ile yeniden üretilemiyorsa; ara sıra görülen plan değişikliklerini yakalamak için.

Dikkat

log_analyze = on, eşiğin altında kalanlar dahil örneklenen her sorguya instrumentation yükü bindirir; log_timing = off ve sample_rate < 1 bu yükü azaltır. log_min_duration = 0 üretimde log hacmini patlatır. ALTER SYSTEM SET session_preload_libraries mevcut değerin üzerine yazar; önce SHOW session_preload_libraries ile kontrol et. session_preload_libraries mevcut oturumları etkilemez; tüm süreçlerde yüklemek için shared_preload_libraries + restart gerekir.

DBAtlas'ta aç →

İlgili