dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Teşhis Kütüphanesi/postgresql-temp-file-limit-exceeded-out-of-memory
PostgreSQL
PG 14 - 17Bellek & Kaynak
9 dk okuma
ERROR: temporary file size exceeds temp_file_limit / ERROR: out of memory

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

İnceleyen:Kıdemli Veritabanı Mimarı & SRE (dataiotech Labs)
Test Edilen Sürümler: PostgreSQL 14 / 15 / 16 / 17

Operasyonel Doğrulama & Güvenilirlik Standardı

Son Teknik İnceleme: 2 Kasım 2026
Test Edilen SürümlerPostgreSQL 14.10, 15.6, 16.4, 17.11 (Alpine / Ubuntu 24.04)
Gerekli YetkiSUPERUSER veya pg_read_all_stats
Risk Seviyesi
Hightemp_file_limit aşımı sorguyu abort eder; work_mem parametresini körlemesine yükseltmek OS OOM killer'ı tetikler
Beklenen Çıktıtemp_bytes metriklerinin kontrol altına alınması ve sorguların disk yerine bellek içinde çalışması
Geri Dönüş (Rollback) Planı:temp_file_limit ve work_mem değerlerini varsayılan bütçeye çekme
PostgreSQL Docs: Resource Consumption & temp_file_limit
İlk 60 Saniye Teşhis Protokolü:

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:

plaintext
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ıkKök NedenAçıklama
%50Bü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.
%30Dengesiz `work_mem` x Concurrencywork_mem=256MB ayarlanmışken eşzamanlı 50 sorgu çalıştığında devasa RAM talep edilir ve OOM patlar.
%20Düşük temp_file_limitVeritabanı yöneticisi diskin dolmasını engellemek için çok katı kota koymuştur.

▸ACİL RUNBOOK (0-5dk)

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

  1. 1Güvenli `work_mem` Formülü:
📐 Formül:\text{work\_mem} = \frac{\text{Total RAM} \times 0.25}{\text{max\_connections} \times 2}
  1. 1Oturum Seviyesinde Yükseltme: Ağır batch sorgularda SET LOCAL work_mem = '128MB'; kullanılmalıdır.
  2. 2Loglama: log_temp_files = 10240 (10MB üstü logla).

▸Doğrulama

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

Tüm Hatalar (82)