DBAtlas · Veritabanı operasyon atlası

Paralel sorgu kapasitesini ve anlık worker kullanımını denetle

PostgreSQLPerformans

Komut

-- 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.

DBAtlas'ta aç →

İlgili