Press ESC to close

PostgreSQL Best Practice Configuration (postgresql.conf, postgresql.auto.conf)

PostgreSQL veritabanı davranışlarını ve performansını birinci seviyede etkileyen unsurlar bu konfigürasyondan geçmektedir, Buradaki parametereleri anlamak ve değerlendirmek en başlı performans tuning çalışması olmalıdır bence. Veritabanının size bu parameterelerin best practice leri vardır OLTP, Datawarehouse veya veritabanının özel bir işlem için konfigüre ediliyor olması bu parametreler ile birinci dereceden ilişkilidir. Hedeflediğiniz çalışma performasını yakalayabilmek için mutlaka bu parametrelerin optimize edilmesi gerekmektedir, Best practice parametreler sizin CPU , RAM ,Disk, Ortalama Connection sayısı ve Veritabanının karakteristiğine göre (Web application DB, DWH, OLTP, mixed vb..) değişmektedir.

Bu parametreleri ilk olarak ayarlamanın en temel ve basit yolu $PGDATA altındaki postgresql.conf file içeriğini ayarlamaktan geçmektedir, her zaman $PGDATA altında olmayabilir config file yeri için;

	
postgres=# \x
Expanded display is on.
postgres=# select * from pg_settings where name='config_file';
-[ RECORD 1 ]---+-------------------------------------------
name            | config_file
setting         | /postgres/13/data/postgresql.conf
unit            |
category        | File Locations
short_desc      | Sets the server's main configuration file.
extra_desc      |
context         | postmaster
vartype         | string
source          | override
min_val         |
max_val         |
enumvals        |
boot_val        |
reset_val       | /postgres/13/data/postgresql.conf
sourcefile      |
sourceline      |
pending_restart | f

postgresql.conf dosyası içeriği;

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5434                             # (change requires restart)
max_connections = 100                   # (change requires restart)
#superuser_reserved_connections = 3     # (change requires restart)
#unix_socket_directories = '/var/run/postgresql, /tmp'  # comma-separated list of directories
                                        # (change requires restart)
#unix_socket_group = ''                 # (change requires restart)
#unix_socket_permissions = 0777         # begin with 0 to use octal notation
                                        # (change requires restart)
#bonjour = off                          # advertise server via Bonjour
                                        # (change requires restart)
#bonjour_name = ''                      # defaults to the computer name
                                        # (change requires restart)

# - TCP settings -
# see "man tcp" for details

#tcp_keepalives_idle = 0                # TCP_KEEPIDLE, in seconds;
                                        # 0 selects the system default
#tcp_keepalives_interval = 0            # TCP_KEEPINTVL, in seconds;
                                        # 0 selects the system default
#tcp_keepalives_count = 0               # TCP_KEEPCNT;
                                        # 0 selects the system default

postgresql.conf içerisinde hemen hemen tüm parametlerin girdileri yorum bazıları default değerinde bazıları yorum satırı olarak mevcuttur, burada bir parametre birden fazla girilmişse en son girilen değer (en alttaki) geçerli olacaktır. Diğer parametre dosyamız postgresql.auto.conf dosyasıdır bu dosya sql yazarak parametreleri değiştirmemizi sağlayacaktır ve buradaki değerler postgresql.conf dosyasını ezecektir. Aşağıda work_mem değeri için bir değiştirme yapalım;

postgres=# show work_mem ;
 work_mem
----------
 4MB
(1 row)

postgres=# alter system set work_mem='8MB';
ALTER SYSTEM

Bu yaptığımız değişikliğin geçerli olabilmesi için pg_ctl reload veya select pg_reload_conf(); sql ini çalıştırmalıyız.

postgres=# show work_mem ;
 work_mem
----------
 4MB
(1 row)

postgres=# alter system set work_mem='8MB';
ALTER SYSTEM
postgres=# show work_mem ;
 work_mem
----------
 4MB
(1 row)

postgres=# select pg_reload_conf();
 pg_reload_conf
----------------
 t
(1 row)

postgres=# show work_mem ;
 work_mem
----------
 8MB
(1 row)

Şimdi bu değer için postgresql.conf dosyasına baktığımızda 4MB olduğunu görüyoruz, ancak postgresql.auto.conf da 8MB olduğu için geçerli değeri 8MB dır.

PostgreSQL, parametreleri 3 farklı seviyede düzenlenebilir;

ALTER SYSTEM : Cluster seviyesindeki parameterleri değiştirmek için kullanılır, postgresql.conf’u düzenlemeye eşdeğerdir. Bu parametre ile yapılan değişiklerin postgresql.auto.conf yazılır.

alter system set wal_level TO minimal ;
ALTER system set timezone = 'UTC-3';
ALTER SYSTEM RESET wal_level;
ALTER SYSTEM RESET ALL;

ALTER DATABASE : Global parametrelerin database seviyesinde ayarlanmasını sağlar.

alter database frkdb set deadlock_timeout ='2s';
alter database frkdb set log_min_messages to debug1;
ALTER DATABASE frkdb SET timezone = 'UTC-3';
ALTER DATABASE frkdb RESET deadlock_timeout ;
ALTER DATABASE frkdb RESET ALL;

ALTER USER: Kullanıcıya özel parametre geçilmesini sağlar.

alter role tuser set work_mem = '10MB';
alter role tuser set maintenance_work_mem ='100MB';
alter role tuser in database frkdb set maintenance_work_mem='80MB';
alter user tuser IN database frkdb reset maintenance_work_mem;
alter user tuser IN database frkdb reset all;

ALTER DATABASE ve ALTER ROLE ile ayarlanan değerler yalnızca yeni veritabanı session başlatılırken uygulanır. Konfigurasyon dosyalarından veya sunucu komut satırından elde edilen değerleri geçersiz kılarlar ve oturumun geri kalanı için varsayılanları oluştururlar. Her parametre veri tabanı ve session bazında uygulanamaz. Dolayısıyla bazı parametreler için ALTER DATABASE ve ALTER ROLE komutları kullanılamaz.

SHOW komutu, parametreleri görmek için kullanılır. Karşılık gelen fonksiyon current_setting dir.

SHOW ALL;
SHOW work_mem;
select current_setting('work_mem');
--Tüm detaylarıyla görmek için (açıklamaları vs.)
postgres=# select * from pg_settings where name='work_mem';
-[ RECORD 1 ]---+----------------------------------------------------------------------------------------------------------------------
name            | work_mem
setting         | 4096
unit            | kB
category        | Resource Usage / Memory
short_desc      | Sets the maximum memory to be used for query workspaces.
extra_desc      | This much memory can be used by each internal sort operation and hash table before switching to temporary disk files.
context         | user
vartype         | integer
source          | default
min_val         | 64
max_val         | 2147483647
enumvals        |
boot_val        | 4096
reset_val       | 4096
sourcefile      |
sourceline      |
pending_restart | f

SET komutu, bağlı olan session için parametrelerin ayarlanmasını sağlar, diğer sessionlar üzerinde bir etkisi yoktur. (set_config)

set search_path to faruk ,public;
SET datestyle TO postgres, dm
SET TIME ZONE 'UTC-3';

postgres=# show log_statement;
 log_statement
---------------
 none
(1 row)

postgres=# select set_config('log_statement', 'all', false);
 set_config
------------
 all
(1 row)

postgres=# show log_statement;
 log_statement
---------------
 all
(1 row)

Bazı Önemli Parametreler;

listen_addresses : Sunucunun client uygulamalarından gelen bağlantıları dinleyeceği TCP/IP adreslerini belirtir. Birden çok adres belirteceksek virgül(,) ile ayırarak hostname ve ip numaralarını verebiliriz. “* ” mevcut tüm IP interfacelerine karşılık (Makine üzerinde ki) gelir.

port : Postgresql default olarak 5432 portundan hizmet verir. Cluster tarafından dinlenilen bütün IP adresleri aynı port üzerinden hizmet verir.

max_connections  : Veri tabanında aynı anda açılabilecek en fazla connection sayısını belirtmek için kullanılır. Varsayılan değeri 100’dür.

superuser_reserved_connections : max_connections parametresi ile belirlenen bağlantı sayısından kaç tanesinin super user rolündeki kullanıcılar için reserve edileceğini belirler. Varsayılan değeri 3’tür. Bu durumda defaultta normal kullanıcılar aynı anda en fazla 97 connection kurabilirler.

authentication_timeout : Kullanıcının veri tabanına bağlantı işleminin beklenilen sürede tamamlanmaması durumunda bağlantı talebinin reddedilmesini sağlayan parametredir. varsayılan değeri 1min (1 Dakika) dır.

password_encryption (enum) : CREATE ROLE veya ALTER ROLE bir parola belirtildiğinde, bu parametre parolayı şifrelemek için kullanılacak algoritmayı belirler. Varsayılan encryption scram-sha-256 dır.

shared_buffers : Memory içerisinde shared buffer olarak kullanılacak alanın ayarlanmasını sağlayan parametredir. Varsayılan değeri 128 MB’tır. Shared Buffer PostgreSQL in performanslı çalışması için hayati öneme sahiptir, PostgresQL de çalışan tüm SQL ler burayı kullanacaktır dolayısıyla buranın büyüklüğüde oldukça önemlidir, kaynaklarda bu alanın büyüklüğünün ayarlanmasında yanlış bir yaklaşım olduğunu görmekteyiz, bu yaklaşım ; Shared Buffer Toplam Memory nin 1/4 ü olarak ayarlanmalı yaklaşımı bu Yaklaşım 32 GB a kadar olan PostgreSQL veritabanları için makul kabul edilebilir ancak 512 GB veya 1TB bir Memory si olan bir PostgreSQL Veritabanı için kesinlikle çok hatalı bir yaklaşım olur desem yanlış söylemiş olmam. Genelde Oracle tarafında DBA olarak çalışmış arkadaşlar SGA ile Shared Buffer alanlarınını bir birine karıştırmakta oysa iki veritabanının mimarileri bir bririnden farklı olduğu bazen unutulmakta, PostgreSQL de bir çok Beckend proses Shared Buffer dışında memory kullanmaktadır, ve en önemlisi ise Cash lemem mekanizmasıdır. Cash mekanizmasında Shared Buffer çalışan SQL leri cash leyecektir ancak Veritabanının sışında Linux ında oldukça gelişmiş bir cache mekanizması vardır ki PostgreSQL bu cache mekanizmasını oldukça efektif kullanmaktadır. PostgreSQL hem Sahred buffer cache ini hemde Linux cache mekanizmasını birlikte kullanabilmektedir, buradan çıkarılan sonuç şdur 512 GB RAM olsun bunun 1/4 ü 128 GB tır 128 GB shared buffer a verdik diyelim shared buffer gelen sql leri cach e almakta ve LRU algoritmasına göre en az kullanılanı sonrasında ezmektedir. fakat bu kadar büyük bir memory de çok fazlaca sql cache uzun süre tutulacaktır, aynı sonuçlar Linux üzerin de de cache tutulmaktadır burada double buffer denilen bir Memory israfı söz konusu olmaktadır, bu yüzden OLTP sistemler için 8 GB shared buffer ile başlanıp ihtiyaca göre bu değer azaltılıp artıtılabilir, okuma oranları yüksekolan veritabanları için biraz daha arttırılı, yazma oranları yüksek olan veritabanları için azaltılır ve optimum performans sağlanmış olur. DWH yapılarda okuma oranları çok yüksek olduğu için bu değer daha yüksek ayarlanabilir.

huge_pages  : shared memory alanında huge pages kullanımı seçeneklerini ayarlamayı sağlayan parametredir. Try, on veya off değeri alabilir. Varsayılan olarak Try dır. Kullanmayı dener kullanamaz ise sistem çalışmasında herhangi bir sıkıntı oluşmaz. On olarak set edildiğinde kullanamaz ise veri tabanı başlatılamaz. Büyük veritabanları ve DWH yapılar için performansı oldukça artırmaktadır, bu tip yapılar için on yapılmasını tavsiye edilir.

Huge Page ayarlanması için aşağıdaki scripti çalışıtırıp ayarlamaları yapabilirsiniz. Huge Page ayarlamasından sonra instance kapatıp açmak gerekmektedir.

script to quantify Huge Pages
#!/bin/bash
pid=`head -1 $PGDATA/postmaster.pid`
echo "Pid:            $pid"
peak=`grep ^VmPeak /proc/$pid/status | awk '{ print $2 }'`
echo "VmPeak:            $peak kB"
hps=`grep ^Hugepagesize /proc/meminfo | awk '{ print $2 }'`
echo "Hugepagesize:   $hps kB"
hp=$((peak/hps))
echo Set Huge Pages:     $hp


set vm.nr_hugepages in /etc/sysctl.conf
set huge_pages=on in postgresql.conf

set below parameter in /etc/sysctl.conf
vm.swappiness default 60 set the value to 1 if you want to minimize swapping
vm.overcommit_memory  A value of 2 for vm.overcommit_memory yields better performance for 

PostgreSQL
vm.dirty_background_ratio  default value 10  if system is write intensive lower the value 


vm.swappines=1
vm.overcommit_memory=2

kernel.shmmax=34359738368
kernel.shmall=8388608
vm.nr_hugepages= 4500

temp_buffers : Her bir session için kullanılacak maksimum temporary buffer alanın değerini belirleyen parametredir. Bunlar, yalnızca tem tablolara erişim için kullanılan bağlı olan sessiona özel buffer alanıdır. Default değeri 8MB’tır.

work_mem : Sıralama işlemleri ORDER BY, DISTINCT ve merge join için kullanılır. Hash tablolar, hash joins, hash-based aggregation, hash-based processing ve IN subquerylerin işlenmesinde kullanılan memory alanının büyüklüğünü ifade eder, sıralancak veri bu alana sığmıyorsa disk üzerindeki temp file ları kullanı ki bu performansı oldukça kötü etkilemektedir. Varsayılan değer dört megabayttır (4MB). work_mem değerini tespit etmek için aşağıdaki aşağıdaki yöntem kullanılabilir. Eğer bir connection pooling aracı kullanılıyor veya max connection sayısını yaklaşık biliyorsak aşağıdaki hesaplama mantıklı olabilir.

Tplam RAM * 0.25 / max_connections

peki bir sorgunun work_mem aşıp temp file ları kullandığını nasıl anlarız, bunun için sorguyu explain analyze ile planlarına bakarsak bu durum net bir şekilde görünecektir.

maintenance_work_mem : VACUUM, CREATE INDEX ve ALTER TABLE ADD FOREIGN KEY gibi bakım işlemleri tarafından kullanılacak maksimum bellek miktarını belirtir. Varsayılan olarak 64 MB dir. Maximum alabileceği değer 1GB tır eğer yeterli memory niz varsa 1GB yapmanız tavsiye edilir, bu durumda maintenance işlemleriniz oldukça hızlanacaktır.

autovacuum_work_mem autovacuum un kullandığı memory alanını belirtir, varsayılan değeri -1 dir -1 demek maintenance_work_mem kadar alan kullan demektir, genelde bu şekilde kullanılır

temp_file_limit : Her proses tarafından kullanılan tüm geçici dosyaların toplam boyutunu sınırlar. varsayılan değeri -1 yani sınır yok demektir.

bgwriter_delay: iki ardışık bgwiter operasyonu arasındaki bekleme süresidir ve default değer 200ms dir. 100ms olarak ayarlanabilir

bgwriter_lru_maxpages: BgWriter tarafından tek bir seferde yazılan max veri miktarıdır. Default değeri 100 dür ve 100 çok küçük bir değerdir. Diske yazılacak dirty buffer değeri bu değerden küçük ise BgWirter bu işlemi yapacaktır fakat dirty buffer değeri bu değerden büyük ise, büyük olan kısmı için bu işlem server prosess tarafından yapılır. Eğer bu değeri 0 yaparsak BgWriter disable yapılmış anlamına gelir ki, bu durumda bu işlemi server process devralacaktır. Bu değer eğer -1 yapılırsa bu durumda tüm dirty buffer ların BgWriter tarafından diske yazılacağı anlamına gelir.(Checkpoint operasyonu hariç). Bu değeri ayarlarken bunu 10 ve katları şeklide ayarlamak lazım bu değeri production sistemler için benim tavsiyem 10000 yapabilirsiniz.

bgwriter_lru_multiplier: bgwiter yeterli clean buffer alanı sağlayamadığı durumlarda, bgwriter_lru_maxpages in kaç ile çarpılacağını belirten parametredir, 0 ila 10 arasında değer alabilir. varsayılan değeri 2 dir çok yüksek tutulursa I/O değerleri çok yükselerek performansı olumsuz etkileyebilir, 3 ile 5 arasında bir değere set edilmesini tavsiye edilir

bgwriter_flush_after : Default değeri 512 KB dır ve data page size bu değere ulaştığında BgWriter tetiklenir.

effective_io_concurrency : Performans için önemli bir parametredir. PostgreSQL’in eşzamanlı olarak yürütülebilmesini beklediği parallel disk I/O işlemlerinin sayısını ayarlar. Bu değerin yükseltilmesi, herhangi bir PostgreSQL oturumunun paralel olarak başlatmaya çalıştığı I/O işlemlerinin sayısını artıracaktır. Varsayılan değer 1 dir, disable yapmak için 0 yapabiliriz, bu parametre 1 ile 1000 arasında değer alabilir. Manyetik sürücüler için, bu ayar veri tabanı için kullanılan RAID 0 veya RAID 1 miror yapısındaki  sürücülerin sayısıdır. Örnek verirsek RAID 1 yapıda 10 diskiniz varsa bu parametre 5 olabilir veya RAID 0’da 10 tane diskiniz varsa bu değer 10 yapaılabilir. Diskleri meşgul tutmak için gerekenden daha yüksek bir değer yalnızca fazladan CPU ek yüküne neden olur. SSD Diskler ve diğer bellek tabanlı diskler çoğu zaman paralel birçok isteği işleyebilir, bu nedenle en iyi değer yüzlerle dahi ifade edilebilir.

max_worker_processes : Sistemin destekleyebileceği maksimum backhend proses sayısını ayarlar. Varsayılan 8 dir.

max_parallel_maintenance_workers : CREATE INDEX, vacuum gibi maintenance işlemlerinde kullanılacak maksimum proses sayısı.

max_parallel_workers : Paralel işlemler için sistemin destekleyebileceği maksimum worker sayısını ayarlar. Varsayılan değer 8’dir. Bu değeri artırırken veya azaltırken, ayrıca max_parallel_maintenance_workers ve max_parallel_workers_per_gather ayarlanması düşünülmelidir. Bu değer için max_worker_processes ten daha yüksek olan bir ayarın hiçbir etkisi olmayacaktır

vacuum_cost_delay Maliyet sınırı aşıldığında sürecin uyuyacağı süre (Vacuum cost delay). Bu değer birimsiz verilirse milisaniye olarak alınır. Öntanımlı değer sıfırdır ve maliyete dayalı vakum gecikmesi özelliğini devre dışı bırakır. Pozitif değerler maliyete dayalı vakumlamaya izin verir.Maliyete dayalı vacuum kullanılırken vacuum_cost_delay için uygun değerler genellikle 1 milisaniye ile ifade edecek kadar çok küçüktür.

vacuum_cost_limit vacuum işlemi belirtilen maaliyetleri aşarsa bu süre boyunca uykuda kalır.

vacuum_cost_page_hit : Shared buffer cache de bulunan bir buffer ı vakumlamanın tahmini maliyeti. varsayılan değer 1 dir

vacuum_cost_page_miss Diskten okunması gereken bir buffer ı vakumlamanın tahmini maliyeti. varsayılan değeri 10’dur.

vacuum_cost_page_dirty Vakum önceden temiz olan bir bloğu değiştirdiğinde alınan tahmini maliyet. Dirty bloğu tekrar diske geçirmek için gereken ekstra I / O’u temsil eder. varsayılan değeri 20’dir.

fsync: varsayılan olarak ON gelir, bu parametre WAL logların önce diske yazılıp yazılmayacağını kontrol eder, wal_sync_method olan fsync i kapatmak performans olarak bir avantaj sağlasa da, veritabanı herhangi bir elektrik kesintisi veya sistem kapanması durumunda recover yapılamaması ve data corruption gibi hatalara açık hale gelir. Eğer tüm veritabanını harici verilerden yeniden ve kolaylıkla oluşturabiliyorsanız ve performans ihtiyacınız varsa bu değer OFF yapabilirsiniz.

full_page_writes: Checkpointten sonra tüm dirty bufferların WAL dosyalarına yazılmasını sağlar, bunu kapatmak fsync yi kapatmaya benzer.

synchronous_commit: User transaction işlemlerinde user a transaction sonucu döndürülmeden önce WAL loglarını bu işlemin yazılmasını kontrol eder, varsayılan değeri ON olarak gelir, OFF yapılırsa transaction sonucunu kullanıcı daha erken görecektir.

wal_buffers : WAL verilerinin bellekte tutulduğu alandır, Varsayılan değeri 64K dır.Bu parametre wal_writer_delay ve commit_delay parametrelerine bağlıdır. Bu değer çoğu production için küçüktür yazma işlemleriniz fazla ise mutlaka arttırmanız tavsiye edilmektedir. 32 GB bir memory için 16MB tavsye edilir.

wal_writer_delay : WalWriter işleminin yazma aralığıdır. Varsayılan değer 200 milisaniyedir. Süre çok uzun olursa, WAL tamponunda yetersiz belleğe neden olabilir, süre çok kısaysa, disk I/O  yükünü artırarak WAL’ın sürekli olarak diske yazmasına neden olur.

wal_writer_flush_after : dirty data bu eşiği aştığında, diske yazılır.

commit_delay : gönderilen verilerin WAL  Bufferda saklandığı zamanı gösterir. Varsayılan değer 0 milisaniyedir, yani gecikme yoktur (gecikme olmaması hemen diske yazılması anlamına gelmez); sıfır olmayan bir değere ayarlandığında, işlem gerçekleştirildikten hemen sonra işlem WAL’a yazılmayacak, ancak yine de WAL Buffer da saklanacak ve WalWriter işleminin diske periyodik olarak yazmasını bekleyecektir.

max_wal_size : bu parametre, bir kontrol noktası gerçekleşmeden önceki maksimum WAL boyutunu ayarlar, varsayılan 1 GB’dir. Bu değeri yer varsa en az 16GB olarak ayarlanmasını önerilir.

min_wal_size : bu parametre, gelecekte kullanılmak üzere geri dönüştürülen WAL dosyalarının miktarını minimum olarak ayarlar, varsayılan değeri 80 MB dır. Bu değeride 4GB olarak ayarlamanız önerilir.

checkpoint_timeout : bu parametre, bir kontrol noktası gerçekleştirme süresini yapılandırır. Varsayılan 5 dakikadır. Bu, her 5 dakikada bir veya max_wal_size aşılmak üzereyken bir checkpoint oluşacağı anlamına gelir. Normal bir production için bu değeri 15dk ya çekilmesini tavsiye ediyorum fakat tamamen okuma yapılan bir DWH sistemi için bu değer 1 gün dahi yapılabilir. Değer aralığı 30s ile 1d (day).

checkpoint_completion_target bu değer ile checkpoint_timeout süresinin çarpımı kadar sürede checkpoint işleminin tamamlanması, bu değer azalırsa checkpoint süresi azalır , artarsa cehckpoint süresi daha geniş bir zaman yayılır, I/O yükü azalır. Varsayılan değeri 0.9 dur.

seq_page_cost (1.0) : Sequential(sıralı) okumanın maliyetine ilişkin optimizer tahminini ayarlar. Varsayılan değer 1.0’dır.

random_page_cost (4.0): Planlayıcının, Sequential olarak getirilmeyen bir disk sayfasının (random access) maliyetine ilişkin tahminini ayarlar. Varsayılan 4.0’dır. Bu değerin seq_page_cost değerine göre azaltılması, sistemin index taramalarını tercih etmesine neden olacaktır; yükseltmek, index taramalarının nispeten cost unun daha yüksek görünmesini sağlayacaktır. 

Bu değerler hesaplanırken Random Access okumaların , Sequential okumalardan 40 kat daha yavaş olduğu modelinden yola çıkılmıştır, yine %90 oranında verilerinizin ön bellekte olduğu varsayılarak yapılan hesaplamaların sizin sisteminiz için gerçeği yansıtmadığını düşünüyorsanız ve ön bellekteki oran daha düşükse  random_page_cost değerini arttırabilirsiniz, tam tersi verilerinizin tamamen önbellekte olma olasılığı varsa, örneğin  veritabanı boyutu toplam sunucu belleğinden daha küçükse, random_page_cost u düşürmek uygun olabilir. Yada SSD gibi random access de hızlı bir I/O yapan yapınız varsa yine bu değer bir miktar azaltılabilir. 

effective_cache_size (4GB) Shared buffer gibi ayrılan bir alan değil, optimizer a verilen bir ipucu olarak görülebilir. Planlayıcının, bir sorgu için kullanılabilir etkin disk önbelleği (cache) boyutu hakkındaki varsayımını belirtir. Bu değer indeks kullanım maliyet tahminlerinde hesaba katılır. Daha yüksek bir değer, index scan kullanılma olasılığını artırır; daha düşük bir değer, sequential scan kullanılma olasılığını artırır.  Bu değer 32GB üzerinde RAM kullanan bir Veritabanı için %50 sini verebilirsiniz diyebiliriz, ram çok daha büyükse bu oran dahada artıtılır, çünkü memory arttıkça cash oranı artacaktır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir