Paralel sorgu kapasitesini ve anlık worker kullanımını denetle
PostgreSQLPerformansKomut
-- Paralel worker havuzu ayarları
SELECT name, current_setting(name) AS value
FROM pg_settings
WHERE name IN ('max_worker_processes', 'max_parallel_workers', 'max_parallel_workers_per_gather',
'max_parallel_maintenance_workers', 'parallel_setup_cost', 'parallel_tuple_cost',
'min_parallel_table_scan_size', 'min_parallel_index_scan_size')
ORDER BY name;
-- Şu anda paralel çalışan sorgular ve worker sayıları
SELECT a.pid AS leader_pid,
count(w.pid) AS workers_running,
current_setting('max_parallel_workers')::int AS max_parallel_workers,
now() - a.query_start AS runtime,
left(a.query, 80) AS query
FROM pg_stat_activity a
JOIN pg_stat_activity w ON w.leader_pid = a.pid AND w.pid <> a.pid
GROUP BY a.pid, a.query_start, a.query
ORDER BY workers_running DESC;
-- Tek tablo için planlanan worker sayısını sabitle / geri al
ALTER TABLE siparis SET (parallel_workers = 4);
ALTER TABLE siparis RESET (parallel_workers);Ne yapar?
Paralel sorgu limitlerini ve hangi lider sürecin şu anda kaç parallel worker kullandığını gösterir; tablo bazında worker sayısı ayarını örnekler.
Ne zaman kullanılır?
Analitik sorgular beklenenden yavaşsa, planda 'Workers Planned' > 'Workers Launched' görülüyorsa veya CPU çekirdekleri boşta kalıyorsa.
Dikkat
max_parallel_workers, max_worker_processes (restart ister) ile sınırlıdır ve bu havuzu logical replication worker'ları ve diğer background worker'lar da kullanır. OLTP'de yüksek max_parallel_workers_per_gather eşzamanlı sorgularda CPU'yu doyurur; her worker ayrıca kendi work_mem'ini kullanır. Veri değiştiren veya satır kilitleyen sorgular (CREATE TABLE AS / SELECT INTO hariç), cursor'lar ve PARALLEL UNSAFE fonksiyon çağıranlar paralel plan almaz. ALTER TABLE ... SET (parallel_workers) kısa bir ShareUpdateExclusiveLock alır.
İlgili
- En pahalı sorguları bul (pg_stat_statements: toplam ve ortalama süre)
- Disk I/O, temp dosya ve WAL üreten sorguları bul (pg_stat_statements)
- pg_stat_statements istatistiklerini sıfırla (tümü veya tek sorgu)
- auto_explain ile yavaş sorguların execution plan'ını logla
- EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL) ile planı derinlemesine oku
- Plan regresyonunu queryid ile yakala (pg_stat_statements snapshot karşılaştırması)