Kaynak Tüketimi
Memory
shared_buffers
1 GB veya fazlası RAM’e sahip veritabanı sunucuları için sisteminizdeki belleğin %25’i makul bir
shared_buffers
başlangıç değeridir. Daha büyük shared_buffers ayarlarının etkili olduğu bazı iş yükleri olabilir, ancak PostgreSQL aynı zamanda işletim sistemi önbelleğide kullandığı için RAM’in %40’ından fazlasının shared_buffers’a tahsis edilmesi daha küçük bir miktara kıyasla iyi bir performans göstermeyecektir. huge_pages
try
(varsayılan), on
ve off
şeklindedir. huge_pages try
ayarında sunucu huge page’ler istemeye çalışır, ancak başarısız olursa varsayılana geri döner. on
ayarında huge page’lerin istenmemesi sunucunun başlamasını engelleyecektir. off
ayarında huge page’ler istenmez. temp_buffers
max_prepared_transactions
prepared
statede olabilecek maksimum transaction sayısını ayarlar. Parametrenin sıfıra (varsayılan değerdir) ayarlanması prepared-transaction özelliğini devre dışı bırakır. Bu parametre yalnızca sunucu başlangıcında ayarlanabilir.Prepared transaction kullanmayı planlamıyorsanız yanlışlıkla oluşturulmasını önlemek için bu parametre sıfıra ayarlayın. Prepared transaction kullanırken
max_prepared_transactions
değerinin en az max_connections
kadar olması önerilir. Böylece her oturum sırada bir prepared transactiona sahip olur.Standby sunucuda bu parametre primary sunucudakiyle aynı veya daha yüksek bir değere ayarlanmalıdır. Aksi takdirde standby sunucuda sorgulara izin verilmez.
work_mem
work_mem
değerinin birçok katı olabilir. Değeri seçerken bu gerçeği göz önünde bulundurun. Hash-based operasyonlar kullanılabilir belleğe sort-based operasyonlara göre daha duyarlıdır. hash table’lar için kullanılabilir bellek
work_mem
ile hash_mem_multiplier
çarpımından hesaplanır. hash_mem_multiplier
work_mem
‘in hash_mem_multiplier
ile çarpılmasıyla belirlenir. Öntanımlı değer 1.0’dır. maintenance_work_mem
VACUUM
, CREATE INDEX
ve ALTER TABLE ADD FOREIGN KEY
gibi bakım operasyonlarında kullanılacak maksimum bellek miktarını belirtir. Bu değer birimsiz verildiğinde kilobayt olarak alınır. Öntanımlı değeri 64 megabayttır (64MB). Bir veritabanı oturumu tarafından aynı anda bu operasyonlardan yalnızca biri yürütülebilir ve normal kurulumda çoğu eşzamanlı olarak çalışmaz. Bu yüzden work_mem
‘den daha büyük ayar değeri güvenlidir. Daha büyük ayarlar vakumlama ve veritabanı dumplarından geri yükleme performansını artırır. autovacuum_work_mem
maintenance_work_mem
değerinin kullanılması gerektiğini belirtir. logical_decoding_work_mem
work_mem
‘den önemli ölçüde daha yüksek değerde ayarlamak diske yazılan decoded değişikliklerin miktarı azaltır. max_stack_depth
shared_memory_type
mmap
(mmap kullanılarak ayrılan anonymous shared memory için), sysv
(shmget ile ayrılan System V shared memory için) ve windows
(Windows shared memory için). dynamic_shared_memory_type
posix
(shm_open kullanılarak ayrılan POSIX shared memory için), sysv
(shmget aracılığıyla ayrılan System V shared memory için), windows
(Windows shared memory için) ve mmap
(veri dizinindeki memory-mapped dosyaları kullanarak shared memory’i simüle etmek için). mmap
seçeneğinin kullanılması genellikle tavsiye edilmez.Disk
temp_file_limit
Bu ayarın, belirli bir PostgreSQL sürecinin kullandığı tüm geçici dosyaların herhangi bir anda kullanılan toplam alanı sınırladığına dikkat edin.
Çekirdek Kaynak Kullanımı
max_files_per_process
Cost-based Vacuum Delay
VACUUM
ve ANALYZE
komutları yürütülürken sistem, gerçekleşen çeşitli I / O operasyonlarının tahmini maliyetini izleyen dahili bir sayaç tutar. Birikmiş maliyet vacuum_cost_limit
ile belirtilen limite ulaştığında operasyonu gerçekleştiren süreç vacuum_cost_delay
ile belirtilen süre boyunca uyutulur. Ardından sayacı sıfırlanarak çalışmaya devam eder.
Bu özelliğin amacı yöneticilere, bu komutların eşzamanlı veritabanı etkinliği üzerindeki I / O etkisini azaltmalarına olanak sağlamaktır. VACUUM ve ANALYZE gibi bakım komutlarının sistemin diğer veritabanı operasyonlarını gerçekleştirme becerisine fazla müdahale etmemesi çok önemlidir. Maliyete dayalı vakum gecikmesi, yöneticilerin bunu başarması için bir yol sunar.
Bu özellik, manuel olarak verilen VACUUM komutları için öntanımlı olarak devre dışı bırakılmıştır. Bunu etkinleştirmek isterseniz vacum_cost_delay
değişkenini sıfır olmayan bir değere ayarlayın.
vacuum_cost_delay
vacuum_cost_delay
için uygun değerler genellikle 1 milisaniye ile ifade edecek kadar çok küçüktür. vacuum_cost_page_hit
vacuum_cost_page_miss
vacuum_cost_page_dirty
vacuum_cost_limit
Background Writer
Background Writer ayrı bir PostgreSQL sunucu sürecidir. Background Writer “dirty”, yani yeni veya değiştirilmiş shared buffer’ları diske yazmakla görevlidir. Böylece, sunucu süreçlerinin kullanıcı sorgularını yazması nadiren beklenir veya hiçbir zaman beklenmez. Background Writer I / O yükünde net bir şekilde artışa neden olur, çünkü tekrar tekrar dirty olan bir page her checkpoint aralığında yalnızca bir kez yazılırken Background Writer tarafından birkaç kez yazabilir. Verilen parametreleri davranışları ihtiyaçlarınıza göre ayarlamak için kullanabilirsiniz.
bgwriter_delay
bgwriter_delay
boyunca uyur. Buffer pool’da dirty buffer olmadığında bgwriter_delay’e bakmaksızın daha uzun süre uykuda kalabilir. Bu değer birimsiz belirtilirse milisaniye olarak alınır. Öntanımlı değeri 200 milisaniyedir (200 ms). Birçok sistemde etkili değer 10 milisaniye olmakla bereaber bgwriter_delay’i 10’un katı olmayan bir değere ayarlamak, 10’un bir sonraki katına ayarlamakla aynı sonuçları verebilir. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir. bgwriter_lru_maxpages
bgwriter_lru_maxpages
değerinde buffer’dan fazlası yazılmaz. Bunu sıfıra ayarlamak, background writing’i devre dışı bırakır (checkpoints etkilenmez). Öntanımlı değeri 100 buffer’dır. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir. bgwriter_lru_multiplier
bgwriter_lru_multiplier
değeri ile çarpımından bulunur. dirty buffer’lar çok sayıda temiz, yeniden kullanılabilir buffer bulunana kadar yazılır. 1.0 ayarı ‘just in time’ ilkesini yani tam olarak ihtiyaç duyulan tahmini buffer sayısını yazmayı temsil eder. Daha büyük değerler talepteki ani artışlara karşı bir miktar buffer sağlar. Küçük değerler kasıtlı olarak yazma işlemini sunucu süreçlerine bırakır. Öntanımlı değeri 2.0’dır. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir. bgwriter_flush_after
fsync
yayınlandığında veya işletim sistemi verileri daha büyük gruplar halinde arka planda geri yazdığında durma olasılığını düşürülür. Bu ayar bazı platformlarda hiç bir etkiye sahip olmayabilir. Bu değer birimsiz belirtilirse, blok yani BLCKSZ
bayt (tipik olarak 8kB’dir) olarak alınır. Geçerli aralık, zorunlu geri yazmayı devre dışı bırakan 0 ile 2MB arasındadır. Linux’ta öntanımlı değer 512kB, diğer sistemlerde 0’dır. Bu parametre yalnızca postgresql.conf dosyasından ve sunucu komut satırından ayarlanabilir.Asynchronous Davranış
effective_io_concurrency
maintenance_io_concurrency
max_worker_processes
Bu değer değiştirilirken
max_parallel_workers
, max_parallel_maintenance_workers
ve max_parallel_workers_per_gather
parametrelerinin ayarlanması düşünülebilir. max_parallel_workers_per_gather
Gather
veya Gather Merge
düğümü tarafından başlatılabilecek maksimum worker sayısını ayarlar. Paralel worker’lar max_worker_processes
tarafından oluşturulmuş, max_parallel_workers
ile sınırlandırılmış süreç havuzundan alınır. İstenen worker sayısı çalışma zamanında mevcut olmadığında, plan beklenenden daha az sayıda worker ile çalışarak verimsiz olabilir. Öntanımlı değeri 2’dir. Bu değerin 0 olarak ayarlanması paralel sorgu yürütmeyi devre dışı bırakır.Paralel sorgular, paralel olmayan sorgularadan çok daha fazla kaynak tüketebilir. Çünkü her worker süreci sistem üzerinde ek bir kullanıcı oturumuyla hemen hemen aynı etkiye sahip olan tamamen ayrı bir süreçtir.
work_mem
gibi kaynak limitleri her bir worker için ayrı ayrı uygulanır. Paralel sorgu hakkında daha fazla bilgi için bkz . max_parallel_maintenance_workers
CREATE INDEX
(B-tree indekslerde) ve VACUUM
(FULL olmadan) işlemlerinde desteklenmektedir. Paralel workers max_worker_processes
tarafından oluşturulmuş, max_parallel_workers
ile sınırlandırılmış süreç havuzundan alınır. İstenen worker sayısı çalışma zamanında mevcut olamdığında utility program operasyonu beklenenden daha az sayıda worker ile çalışacaktır. Öntanımlı değeri 2’dir. Bu değerin 0 olarak ayarlanması utility program komutlarının paralel worker kullanmasını devre dışı bırakır. max_parallel_workers
max_parallel_maintenance_workers
ve max_parallel_workers_per_gather
parametrelerini de ayarlamayı düşünün. Ayrıca, bu parametre değerinin max_worker_processes
‘ten daha yüksek olan bir ayarı, paralel worker’lar bu ayar tarafından oluşturulan havuzundan alındığı için hiçbir etkisi olmayacağını unutmayın.Kaynak:
[2]. postgresqlco.nf