PostgreSQL paylaşılan belleğini anlama
PostgreSQL şu şekilde sınıflandırılabilen belleği kullanır:
- Yerel bellek - her işleme ayrılır
- Paylaşılan bellek - tüm işlemler tarafından kullanılır
Yerel bellek
PostgreSQL'deki her işlem, sorgu işleme için bellek gerektirir. Aşağıdaki sunucu parametreleri bellek kullanımını tanımlamanıza olanak sağlar:
work_mem ORDER BY ve DISTINCT işlemleri için tanımlama kümelerini sıralamak için gereken belleği tanımlar. Bu parametre, iç sıralama işlemleri ve karma tabloları için kullanılabilir bellek miktarını belirler. Çok fazla kullanılabilir belleğe sahipseniz ve iş yükünüz karmaşık sıralamaya sahip sorgulara sahipse, diske taşmadan önce bellek içinde daha büyük taramalara izin vererek bu parametre değerini artırmak performansı artırabilir.
Ancak karmaşık bir sorguda eşzamanlı olarak çalışan birçok sıralama ve karma işlemi olabilir. Her işlem, disk tabanlı geçici dosyalara yazmaya başlamadan önce bu değerin izin verdiği kadar bellek kullanır. Bu nedenle, meşgul bir sistemde toplam bellek kullanımı tek bir work_mem parametresinin birçok katıdır.
Bu değeri ayarlamak için başlangıç değeri olarak Toplam RAM * 0,25 / max_connections kullanın.
maintenance_work_mem, vakumlama ve yeniden indeksleme için gereken bellektir. Bu parametre, iç sıralama işlemleri ve karma tabloları için kullanılabilir bellek miktarını belirler. Varsayılan değer 64 KB'tır ancak bu değerin artırılması vakumlama performansını artırır.
autovacuum_work_mem her otomatik vakum işlemi tarafından kullanılacak en yüksek belleği ayarlar.
temp_buffers, geçici tabloları depolamak için belleği tanımlar. Bu parametre, her veritabanı oturumunda kullanılan en fazla geçici arabellek sayısını ayarlar.
effective_cache_size, işletim sistemi ve veritabanı içinde disk önbelleği için kullanılabilir bellek miktarını tanımlar. PostgreSQL sorgu planlayıcısı bu belleğin RAM'de sabit olup olmadığını belirler. Dizin taramaları büyük olasılıkla daha yüksek değerlere karşı kullanılır; aksi takdirde, değer düşükse sıralı taramalar kullanılır.
effective_cache_size makinenin toplam RAM'inden 50% olarak ayarlayın.
Paylaşılan bellek
Paylaşılan bellek başlangıçta ayrılır. Paylaşılan bellek şu işlemler için kullanılır:
shared_buffers sunucu tarafından kullanılan paylaşılan bellek arabelleklerini tanımlar. PostgreSQL, kalıcı depolamadan paylaşılan arabellek havuzuna tablo ve dizin sayfaları yükler ve bunlar üzerinde bellekte çalışır. Bu paylaşılan arabellek alanı, sunucu tarafından kullanılan paylaşılan belleğin ana bileşenidir. Varsayılan değer 128 MB'tır (işlem katmanına bağlı olarak). Daha fazla bellek ayırmaya karar verirseniz sunucuyu yeniden başlatmanız gerekir.
wal_buffers, kalıcı depolamaya yazmadan önce önceden yazma günlüğü (WAL) için paylaşılan bellekteki disk sayfası tamponlarının sayısını tanımlar.
Özetle, ayarlamak isteyebileceğiniz bellekle ilgili önemli sunucu parametreleri şunlardır:
- shared_buffers
- çalışma belleği
- etkili_önbellek_boyutu