Kaynak Tüketimi
Memory
shared_buffers
128MB
), but might be less if your kernel settings will not support it (as determined during initdb). This setting must be at least 128 kilobytes. However, settings significantly higher than the minimum are usually needed for good performance. If this value is specified without units, it is taken as blocks, that is BLCKSZ
bytes, typically 8kB. (Non-default values of BLCKSZ
change the minimum value.) This parameter can only be set at server start.</p><p>If you have a dedicated database server with 1GB or more of RAM, a reasonable starting value for shared_buffers
is 25% of the memory in your system. There are some workloads where even larger settings for shared_buffers
are effective, but because PostgreSQL also relies on the operating system cache, it is unlikely that an allocation of more than 40% of RAM to shared_buffers
will work better than a smaller amount. Larger settings for shared_buffers
usually require a corresponding increase in max_wal_size
, in order to spread out the process of writing large quantities of new or changed data over a longer period of time.</p><p>On systems with less than 1GB of RAM, a smaller percentage of RAM is appropriate, so as to leave adequate space for the operating system.</p>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
(the default), on
, and off
. With huge_pages
set to try
, the server will try to request huge pages, but fall back to the default if that fails. With on
, failure to request huge pages will prevent the server from starting up. With off
, huge pages will not be requested.</p><p>At present, this setting is supported only on Linux and Windows. The setting is ignored on other systems when set to try
.</p><p>The use of huge pages results in smaller page tables and less CPU time spent on memory management, increasing performance. For more details about using huge pages on Linux, see linux-huge-pages.</p><p>Huge pages are known as large pages on Windows. To use them, you need to assign the user right Lock Pages in Memory to the Windows user account that runs PostgreSQL. You can use Windows Group Policy tool (gpedit.msc) to assign the user right Lock Pages in Memory. To start the database server on the command prompt as a standalone process, not as a Windows service, the command prompt must be run as an administrator or User Access Control (UAC) must be disabled. When the UAC is enabled, the normal command prompt revokes the user right Lock Pages in Memory when started.</p><p>Note that this setting only affects the main shared memory area. Operating systems such as Linux, FreeBSD, and Illumos can also use huge pages (also known as super pages or large pages) automatically for normal memory allocation, without an explicit request from PostgreSQL. On Linux, this is called transparent huge pagestransparent huge pages (THP). That feature has been known to cause performance degradation with PostgreSQL for some users on some Linux versions, so its use is currently discouraged (unlike explicit use of huge_pages
).</p>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
BLCKSZ
bytes, typically 8kB. The default is eight megabytes (8MB
). (If BLCKSZ
is not 8kB, the default value scales proportionally to it.) This setting can be changed within individual sessions, but only before the first use of temporary tables within the session; subsequent attempts to change the value will have no effect on that session.</p><p>A session will allocate temporary buffers as needed up to the limit given by temp_buffers
. The cost of setting a large value in sessions that do not actually need many temporary buffers is only a buffer descriptor, or about 64 bytes, per increment in temp_buffers
. However if a buffer is actually used an additional 8192 bytes will be consumed for it (or in general, BLCKSZ
bytes).</p>max_prepared_transactions
max_prepared_transactions
to be at least as large as max_connections
, so that every session can have a prepared transaction pending.</p><p>When running a standby server, you must set this parameter to the same or higher value than on the master server. Otherwise, queries will not be allowed in the standby server.</p>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
4MB
). Note that for a complex query, several sort or hash operations might be running in parallel; each operation will generally be allowed to use as much memory as this value specifies before it starts to write data into temporary files. Also, several running sessions could be doing such operations concurrently. Therefore, the total memory used could be many times the value of work_mem
; it is necessary to keep this fact in mind when choosing the value. Sort operations are used for ORDER BY
, DISTINCT
, and merge joins. Hash tables are used in hash joins, hash-based aggregation, and hash-based processing of IN
subqueries.</p><p>Hash-based operations are generally more sensitive to memory availability than equivalent sort-based operations. The memory available for hash tables is computed by multiplying work_mem
by hash_mem_multiplier
. This makes it possible for hash-based operations to use an amount of memory that exceeds the usual work_mem
base amount.</p>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
by hash_mem_multiplier
. The default value is 1.0, which makes hash-based operations subject to the same simple work_mem
maximum as sort-based operations.</p><p>Consider increasing hash_mem_multiplier
in environments where spilling by query operations is a regular occurrence, especially when simply increasing work_mem
results in memory pressure (memory pressure typically takes the form of intermittent out of memory errors). A setting of 1.5 or 2.0 may be effective with mixed workloads. Higher settings in the range of 2.0 - 8.0 or more may be effective in environments where work_mem
has already been increased to 40MB or more.</p>work_mem
‘in hash_mem_multiplier
ile çarpılmasıyla belirlenir. Öntanımlı değer 1.0’dır.maintenance_work_mem
64MB
). Since only one of these operations can be executed at a time by a database session, and an installation normally doesn’t have many of them running concurrently, it’s safe to set this value significantly larger than work_mem
. Larger settings might improve performance for vacuuming and for restoring database dumps.</p><p>Note that when autovacuum runs, up to autovacuum_max_workers
times this memory may be allocated, so be careful not to set the default value too high. It may be useful to control for this by separately setting autovacuum_work_mem
.</p>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
should be used instead. The setting has no effect on the behavior of VACUUM when run in other contexts.</p>maintenance_work_mem
değerinin kullanılması gerektiğini belirtir.logical_decoding_work_mem
64MB
). Since each replication connection only uses a single buffer of this size, and an installation normally doesn’t have many such connections concurrently (as limited by max_wal_senders
), it’s safe to set this value significantly higher than work_mem
, reducing the amount of decoded changes written to disk.</p>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
ulimit -s
or local equivalent), less a safety margin of a megabyte or so. The safety margin is needed because the stack depth is not checked in every routine in the server, but only in key potentially-recursive routines. If this value is specified without units, it is taken as kilobytes. The default setting is two megabytes (2MB
), which is conservatively small and unlikely to risk crashes. However, it might be too small to allow execution of complex functions. Only superusers can change this setting.</p><p>Setting max_stack_depth
higher than the actual kernel limit will mean that a runaway recursive function can crash an individual backend process. On platforms where PostgreSQL can determine the kernel limit, the server will not allow this variable to be set to an unsafe value. However, not all platforms provide the information, so caution is recommended in selecting a value.</p>shared_memory_type
mmap
(for anonymous shared memory allocated using mmap), sysv
(for System V shared memory allocated via shmget) and windows
(for Windows shared memory). Not all values are supported on all platforms; the first supported option is the default for that platform. The use of the sysv
option, which is not the default on any platform, is generally discouraged because it typically requires non-default kernel settings to allow for large allocations (see sysvipc).</p>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
(for POSIX shared memory allocated using shm_open
), sysv
(for System V shared memory allocated via shmget
), windows
(for Windows shared memory), and mmap
(to simulate shared memory using memory-mapped files stored in the data directory). Not all values are supported on all platforms; the first supported option is the default for that platform. The use of the mmap
option, which is not the default on any platform, is generally discouraged because the operating system may write modified pages back to disk repeatedly, increasing system I/O load; however, it may be useful for debugging, when the pg_dynshmem
directory is stored on a RAM disk, or when other shared memory facilities are not available.</p>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
-1
(the default) means no limit. Only superusers can change this setting.</p><p>This setting constrains the total space used at any instant by all temporary files used by a given PostgreSQL process. It should be noted that disk space used for explicit temporary tables, as opposed to temporary files used behind-the-scenes in query execution, does not count against this limit.</p>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
are usually quite small, perhaps less than 1 millisecond. While vacuum_cost_delay
can be set to fractional-millisecond values, such delays may not be measured accurately on older platforms. On such platforms, increasing VACUUM’s throttled resource consumption above what you get at 1ms will require changing the other vacuum cost parameters. You should, nonetheless, keep vacuum_cost_delay
as small as your platform will consistently measure; large delays are not helpful.</p>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
, and repeats. When there are no dirty buffers in the buffer pool, though, it goes into a longer sleep regardless of bgwriter_delay
. If this value is specified without units, it is taken as milliseconds. The default value is 200 milliseconds (200ms
). Note that on many systems, the effective resolution of sleep delays is 10 milliseconds; setting bgwriter_delay
to a value that is not a multiple of 10 might have the same results as setting it to the next higher multiple of 10. This parameter can only be set in the postgresql.conf file or on the server command line.</p>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
to arrive at an estimate of the number of buffers that will be needed during the next round. Dirty buffers are written until there are that many clean, reusable buffers available. (However, no more than bgwriter_lru_maxpages
buffers will be written per round.) Thus, a setting of 1.0 represents a just in time policy of writing exactly the number of buffers predicted to be needed. Larger values provide some cushion against spikes in demand, while smaller values intentionally leave writes to be done by server processes. The default is 2.0. This parameter can only be set in the postgresql.conf file or on the server command line.</p>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
shared_buffers
, but smaller than the OS’s page cache, where performance might degrade. This setting may have no effect on some platforms. If this value is specified without units, it is taken as blocks, that is BLCKSZ
bytes, typically 8kB. The valid range is between 0
, which disables forced writeback, and 2MB
. The default is 512kB
on Linux, 0
elsewhere. (If BLCKSZ
is not 8kB, the default and maximum values scale proportionally to it.) This parameter can only be set in the postgresql.conf file or on the server command line.</p>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
effective_io_concurrency
, but used for maintenance work that is done on behalf of many client sessions.</p><p>The default is 10 on supported systems, otherwise 0. This value can be overridden for tables in a particular tablespace by setting the tablespace parameter of the same name (see sql-altertablespace).</p>max_worker_processes
max_parallel_workers
, max_parallel_maintenance_workers
, and max_parallel_workers_per_gather
.</p>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
or Gather Merge
node. Parallel workers are taken from the pool of processes established by max_worker_processes
, limited by max_parallel_workers
. Note that the requested number of workers may not actually be available at run time. If this occurs, the plan will run with fewer workers than expected, which may be inefficient. The default value is 2. Setting this value to 0 disables parallel query execution.</p><p>Note that parallel queries may consume very substantially more resources than non-parallel queries, because each worker process is a completely separate process which has roughly the same impact on the system as an additional user session. This should be taken into account when choosing a value for this setting, as well as when configuring other settings that control resource utilization, such as work_mem
. Resource limits such as work_mem
are applied individually to each worker, which means the total utilization may be much higher across all processes than it would normally be for any single process. For example, a parallel query using 4 workers may use up to 5 times as much CPU time, memory, I/O bandwidth, and so forth as a query which uses no workers at all.</p><p>For more information on parallel query, see parallel-query.</p>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
FULL
option. Parallel workers are taken from the pool of processes established by max_worker_processes
, limited by max_parallel_workers
. Note that the requested number of workers may not actually be available at run time. If this occurs, the utility operation will run with fewer workers than expected. The default value is 2. Setting this value to 0 disables the use of parallel workers by utility commands.</p><p>Note that parallel utility commands should not consume substantially more memory than equivalent non-parallel operations. This strategy differs from that of parallel query, where resource limits generally apply per worker process. Parallel utility commands treat the resource limit maintenance_work_mem
as a limit to be applied to the entire utility command, regardless of the number of parallel worker processes. However, parallel utility commands may still consume substantially more CPU resources and I/O bandwidth.</p>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
and max_parallel_workers_per_gather
. Also, note that a setting for this value which is higher than max_worker_processes
will have no effect, since parallel workers are taken from the pool of worker processes established by that setting.</p>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