PostgreSQL Geçici Dosya Boyutu Aşımı ve Bellek Yetmezliği: work_mem Hesaplama, Sort/Hash Dökülmesi ve Sorgu İyileştirme
Aşırı yüksek work_mem x paralel sorgu çarpımı, disk sort/hash join dökülmesi ve temp_file_limit kısıtlamasının teşhisi, acil session müdahalesi ve güvenli bellek bütçesi formülü.
Operasyonel Doğrulama & Güvenilirlik Standardı
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
Büyük bir raporlama sorgusu sırasında şu hata döner:
ERROR: temporary file size exceeds temp_file_limit (10485760kB)
ERROR: out of memory
DETAIL: Failed on request of size 33554432 in memory context "ExecutorState".▸Sahada Ne Görürsün?
Sorgu birkaç dakika çalıştıktan sonra hata verip düşer. pg_stat_database.temp_bytes metriği fırlar, disk G/Ç tavan yapar. Sistemde RAM yetersizliği varsa PostgreSQL process'i Linux OOM killer tarafından öldürülür.
▸Kök Neden Matrisi
| Olasılık | Kök Neden | Açıklama |
|---|---|---|
| %50 | Büyük Sıralama (Disk Spill) | ORDER BY veya Hash Join operasyonu work_mem sınırını aşıp diske taşmış, temp_file_limit tavanına vurmuştur. |
| %30 | Dengesiz `work_mem` x Concurrency | work_mem=256MB ayarlanmışken eşzamanlı 50 sorgu çalıştığında devasa RAM talep edilir ve OOM patlar. |
| %20 | Düşük temp_file_limit | Veritabanı yöneticisi diskin dolmasını engellemek için çok katı kota koymuştur. |
▸ACİL RUNBOOK (0-5dk)
-- 1. Diske geçici dosya döken sorguları bul
SELECT pid, usename, query, pg_size_pretty(temp_bytes) AS temp_size, temp_files
FROM pg_stat_activity WHERE temp_bytes > 0 ORDER BY temp_bytes DESC;
-- 2. Diski tüketen sorguyu durdur
SELECT pg_cancel_backend(12345);
-- 3. SADECE acil rapor oturumunda kotayı artır
SET temp_file_limit = '20GB';
SET LOCAL work_mem = '256MB';▸KALICI BLUEPRINT
- 1Güvenli `work_mem` Formülü:
- 1Oturum Seviyesinde Yükseltme: Ağır batch sorgularda
SET LOCAL work_mem = '128MB';kullanılmalıdır. - 2Loglama:
log_temp_files = 10240(10MB üstü logla).
▸Doğrulama
SHOW work_mem;
SHOW temp_file_limit;
SELECT datname, temp_files, pg_size_pretty(temp_bytes) AS total_temp_bytes FROM pg_stat_database WHERE datname = current_database();Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
PostgreSQL Bağlantı Tükenmesi ve too many clients Teşhisi
FATAL: sorry, too many clients already ve remaining connection slots hatalarının üç temel kök nedeni, yetki sınırlarıyla salt okunur pg_stat_activity teşhisi ve kalıcı iki katmanlı havuzlama çözümü.
PostgreSQL password authentication failed Hatası: Neden ve Çözüm
psql password authentication failed hatasının dört nedeni: yanlış şifre, md5/SCRAM uyuşmazlığı, pg_hba.conf sırası ve yanlış cluster. Adım adım teşhis.
PostgreSQL connection refused: 8 Adımda Kesin Teşhis
Connection refused, timeout ve "no pg_hba.conf entry" arasındaki fark; listen_addresses, port, firewall ve Docker port yayınlama kontrolleri.