RAM, vCPU ve NVMe depolamanıza göre shared_buffers, work_mem ve effective_cache_size değerlerini hesaplayıp üretime hazır yapılandırmayı oluşturun.
PostgreSQL 14, 15, 16 ve 17 sürümleri için disk I/O darboğazını ortadan kaldıran bellek parametrelerini hesaplayın.
Paralel sorgu iş parçacıkları (workers) için kullanılır.
work_mem hesaplamasında güvenlik çarpanı olarak kullanılır.
Veritabanı sayfası tamponu (RAM'in %25'i)
Sorgu planlayıcı indeks tahmini (RAM'in %70'i)
Her sıralama/hash işlemi başına bellek
VACUUM ve indeks oluşturma hızı
# /etc/postgresql/{version}/main/conf.d/99-tuning.conf
# Bellek Yonetimi (Memory Tuning)
shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 20MB
maintenance_work_mem = 410MB
wal_buffers = 61MB
# Baglanti ve Kontrol Noktasi
max_connections = 100
checkpoint_completion_target = 0.9
min_wal_size = 1GB
max_wal_size = 4GB
# Disk ve I/O Optimize (NVMe SSD)
random_page_cost = 1.1
effective_io_concurrency = 200
# Paralel Is Parcacigi (CPU)
max_worker_processes = 4
max_parallel_workers = 4
max_parallel_workers_per_gather = 2PostgreSQL, MySQL'den farklı olarak verileri önbelleğe alırken doğrudan işletim sisteminin (Linux Kernel) Sayfa Önbelleği (Page Cache) ile ortaklaşa çalışır. Bu nedenle shared_buffers ayarının RAM'in %25'i civarında tutulması önerilir; %40'ın üzerine çıkılması durumunda aynı veriler hem PostgreSQL hem de Linux çekirdeği tarafından bellekte tutularak “çift önbellek israfına” yol açar.
work_mem değeri bağlantı başına değil, sorgu içindeki her sıralama (ORDER BY), hash tablosu veya birleştirme (JOIN) işlemi başına tahsis edilir. Çok sayıda karmaşık sorgu eşzamanlı çalıştığında work_mem katlanarak artabilir. Formülümüz (RAM - shared_buffers) / (3 × max_connections) kuralıyla ani OOM çökmelerini önleyen güvenli tavanı hesaplar.
PostgreSQL'in varsayılan random_page_cost = 4.0 değeri mekanik manyetik diskler (HDD) için tasarlanmıştır. Modern NVMe SSD'lerde rastgele okuma hızı sıralı okumayla neredeyse aynıdır. Bu parametreyi 1.1 değerine indirmek, sorgu planlayıcının gereksiz tam tablo taramaları (Seq Scan) yerine hızlı indeks taramalarını (Index Scan) tercih etmesini sağlar.