Düzeltme Öner
Sorgu Planlama
Planner Method Yapılandırması
Bu yapılandırma parametreleri, query optimizer tarafından seçilen sorgu planlarını ayarlamak sağlanmıştır. Bir sorgu için optimizer tarafından seçilen plan en iyi değilse, optimizer’ı farklı bir plan seçmeye zorlamak için bu konfigürasyon parametreleri kullanılır. Optimizer tarafından seçilen planların kalitesini iyileştirmenin diğer yolları; planlayıcı maliyet sabitlerinin ayarlanması, ANALYZE’ın manuel olarak çalıştırılması, default_statistics_target
değerinin artırılması ve belirli sütunlar için toplanan istatistik miktarının ALTER TABLE SET STATISTICS
’ komutu ile artırılmasıdır.
enable_bitmapscan
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of bitmap-scan plan types. The default is on
.</p>
Sorgu planlayıcısının bitmap-scan plan türlerini kullanmasını etkinleştirir / devre dışı bırakır. Varsayılan açıktır.
enable_gathermerge
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of gather merge plan types. The default is on
.</p>
Sorgu planlayıcısının gather merge plan türlerini kullanmasını etkinleştirir / devre dışı bırakır. Varsayılan açıktır.
enable_hashagg
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of hashed aggregation plan types. The default is on
.</p>
Sorgu planlayıcısının hashed aggregation plan türlerini kullanmasını etkinleştirir / devre dışı bırakır. Varsayılan açıktır.
enable_hashjoin
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of hash-join plan types. The default is on
.</p>
Sorgu planlayıcısının hash-join plan türlerini kullanmasını etkinleştirir / devre dışı bırakır. Varsayılan açıktır.
enable_incremental_sort
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of incremental sort steps. The default is on
.</p>
Sorgu planlayıcısının incremental sort adımlarını kullanmasını etkinleştirir / devre dışı bırakır. Varsayılan açıktır.
enable_indexscan
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of index-scan plan types. The default is on
.</p>
Sorgu planlayıcısının index-scan plan türlerini kullanmasını etkinleştirir / devre dışı bırakır. Varsayılan açıktır.
enable_indexonlyscan
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of index-only-scan plan types (see indexes-index-only-scans). The default is on
.</p>
Sorgu planlayıcısının index-only-scan plan türlerini kullanmasını etkinleştirir / devre dışı bırakır (bkz.
). Varsayılan açıktır.
enable_material
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of materialization. It is impossible to suppress materialization entirely, but turning this variable off prevents the planner from inserting materialize nodes except in cases where it is required for correctness. The default is on
.</p>
Sorgu planlayıcısının materialization kullanmasını etkinleştirir / devre dışı bırakır. Materialization’u tamamen durdurmak imkansızdır. Bu değişkeni kapatmak planlayıcının materialize düğümler eklemesini engeller (uygunluk için gerekli olduğu durumlar dışında). Varsayılan açıktır.
enable_mergejoin
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of merge-join plan types. The default is on
.</p>
Sorgu planlayıcısının merge-join plan türlerini kullanmasını etkinleştirir / devre dışı bırakır. Varsayılan açıktır.
enable_nestloop
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of nested-loop join plans. It is impossible to suppress nested-loop joins entirely, but turning this variable off discourages the planner from using one if there are other methods available. The default is on
.</p>
Sorgu planlayıcısının nested-loop join planlarını kullanmasını etkinleştirir / devre dışı bırakır. nested-loop joins’i tamamen durdurmak mümkün değildir. Bu değişkeni kapatmak, mevcut başka yöntemler varsa planlayıcıyı bunları kullanmaya iter. Varsayılan açıktır.
enable_parallel_append
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of parallel-aware append plan types. The default is on
.</p>
Sorgu planlayıcısının parallel append plan türlerini kullanmasını etkinleştirir / devre dışı bırakır. Varsayılan açıktır.
enable_parallel_hash
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of hash-join plan types with parallel hash. Has no effect if hash-join plans are not also enabled. The default is on
.</p>
Sorgu planlayıcısının paralel hash ile hash-join plan türlerini kullanmasını etkinleştirir / devre dışı bırakır. hash-join planları da etkin değilse hiçbir etkisi yoktur. Varsayılan açıktır.
enable_partition_pruning
type: bool
default: on
context: user
<p>Enables or disables the query planner’s ability to eliminate a partitioned table’s partitions from query plans. This also controls the planner’s ability to generate query plans which allow the query executor to remove (ignore) partitions during query execution. The default is on
. See ddl-partition-pruning for details.</p>
Sorgu planlayıcısının bölümlenmiş bir tablonun bölümlerini, sorgu planlarından kaldırma yeteneğini etkinleştirir / devre dışı bırakır. Aynı zamanda planlayıcının, executor’ın sorgu yürütme sırasında bölümleri kaldırmasını (yok saymasına) sağlayan sorgu planları oluşturma yeteneğini de kontrol eder. Varsayılan açıktır.
bkz..
enable_partitionwise_join
type: bool
default: off
context: user
<p>Enables or disables the query planner’s use of partitionwise join, which allows a join between partitioned tables to be performed by joining the matching partitions. Partitionwise join currently applies only when the join conditions include all the partition keys, which must be of the same data type and have one-to-one matching sets of child partitions. Because partitionwise join planning can use significantly more CPU time and memory during planning, the default is off
.</p>
Sorgu planlayıcısının partition-wise join kullanmasını etkinleştirir / devre dışı bırakır. Partitioned tablolar arasında eşleşen bölümlerin birleştirilmesiyle gerçekleşecek join’lere izin verir. Partition-wise join, şu anda yalnızca join koşullarının aynı veri tipinde partition key içerdiğinde ve alt bölüm kümelerinin bire bir eşleştiğinde yapılabilmektedir. Partition-wise join planlaması, planlama sırasında önemli ölçüde CPU zamanı ve bellek kullandığı için varsayılan olarak kapalıdır.
enable_partitionwise_aggregate
type: bool
default: off
context: user
<p>Enables or disables the query planner’s use of partitionwise grouping or aggregation, which allows grouping or aggregation on a partitioned tables performed separately for each partition. If the GROUP BY
clause does not include the partition keys, only partial aggregation can be performed on a per-partition basis, and finalization must be performed later. Because partitionwise grouping or aggregation can use significantly more CPU time and memory during planning, the default is off
.</p>
Sorgu planlayıcısının partition-wise grouping ve aggregation kullanımını etkinleştirir / devre dışı bırakır. GROUP BY yan tümcesi partition keys içermiyorsa, her bölümde yalnızca partial aggregation gerçekleştirilebilir, finalization daha sonra gerçekleştirilmelidir. Partition-wise grouping ve aggregation, planlama sırasında önemli ölçüde CPU zamanı ve bellek tüketeceğinden varsayılan olarak kapalıdır.
enable_seqscan
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of sequential scan plan types. It is impossible to suppress sequential scans entirely, but turning this variable off discourages the planner from using one if there are other methods available. The default is on
.</p>
Sorgu planlayıcısının sequential scan plan türlerini kullanmasını etkinleştirir / devre dışı bırakır. Sıralı taramaları tamamen kapatmak mümkün değildir. Bu değişkeni kapalı ayarlamak planlayıcıyı başka yöntemler varsa bunları kullanmaya iter. Varsayılan açıktır.
enable_sort
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of explicit sort steps. It is impossible to suppress explicit sorts entirely, but turning this variable off discourages the planner from using one if there are other methods available. The default is on
.</p>
Sorgu planlayıcısının explicit sort adımlarını kullanmasını etkinleştirir / devre dışı bırakır. Explicit sort’u tamamen kapamak mümkün değildir. Bu değişken kapalı ayarında planlayıcıyı başka yöntemler varsa bunları kullanmaya iter. Varsayılan açıktır.
enable_tidscan
type: bool
default: on
context: user
<p>Enables or disables the query planner’s use of TID scan plan types. The default is on
.</p>
Sorgu planlayıcısının TID scan plan türlerini kullanmasını etkinleştirir / devre dışı bırakır. Varsayılan açıktır.
Planlayıcı Maliyet Sabitleri
Bu bölümde açıklanan cost (maliyet) değişkenleri keyfi bir skalada ölçülür ve yalnızca bağıl değerleri önemlidir. Bu nedenle hepsini aynı çarpanla yukarı veya aşağı ölçeklendirmek, planlayıcının seçimlerinde hiçbir değişikliğe neden olmaz. Bu maliyet değişkenleri, varsayılan olarak sıralı page getirmelerinin maliyeti temellidir. seq_page_cost
geleneksel olarak 1.0
‘a ayarlanır ve diğer maliyet değişkenleri bu referansa göre ayarlanır. Farklı bir skala kullanmak mümkündür.
Not: Maliyet değişkenleri için ideal değerler belinirken mükemmel tanımlanmış bir yöntem yoktur. En iyi yöntem, kurulumun alacağı tüm sorguların karışımının ortalamalarıdır. Bu, değerlerin birkaç deney temelinde değiştirilmesinin çok riskli olduğu anlamına gelir.
seq_page_cost
type: real
default: 1
min: 0
max: 1.79769e+308
context: user
<p>Sets the planner’s estimate of the cost of a disk page fetch that is part of a series of sequential fetches. The default is 1.0. This value can be overridden for tables and indexes in a particular tablespace by setting the tablespace parameter of the same name (see sql-altertablespace).</p>
Planlayıcının, bir disk sayfasının sequentially fetch maliyetine ilişkin tahminini ayarlar. Varsayılan değer 1.0’dır. Bu değer, belirli bir tablespace’deki tablo ve indeksler için ilgili tablespace parametresi kullanılarak geçersiz kılınabilir (bkz.
ALTER TABLESPACE).
random_page_cost
type: real
default: 4
min: 0
max: 1.79769e+308
context: user
<p>Sets the planner’s estimate of the cost of a non-sequentially-fetched disk page. The default is 4.0. This value can be overridden for tables and indexes in a particular tablespace by setting the tablespace parameter of the same name (see sql-altertablespace).</p><p>Reducing this value relative to seq_page_cost
will cause the system to prefer index scans; raising it will make index scans look relatively more expensive. You can raise or lower both values together to change the importance of disk I/O costs relative to CPU costs, which are described by the following parameters.</p><p>Random access to mechanical disk storage is normally much more expensive than four times sequential access. However, a lower default is used (4.0) because the majority of random accesses to disk, such as indexed reads, are assumed to be in cache. The default value can be thought of as modeling random access as 40 times slower than sequential, while expecting 90% of random reads to be cached.</p><p>If you believe a 90% cache rate is an incorrect assumption for your workload, you can increase random_page_cost to better reflect the true cost of random storage reads. Correspondingly, if your data is likely to be completely in cache, such as when the database is smaller than the total server memory, decreasing random_page_cost can be appropriate. Storage that has a low random read cost relative to sequential, e.g., solid-state drives, might also be better modeled with a lower value for random_page_cost, e.g., 1.1
.</p><p>Although the system will let you set random_page_cost
to less than seq_page_cost
, it is not physically sensible to do so. However, setting them equal makes sense if the database is entirely cached in RAM, since in that case there is no penalty for touching pages out of sequence. Also, in a heavily-cached database you should lower both values relative to the CPU parameters, since the cost of fetching a page already in RAM is much smaller than it would normally be.</p>
Planlayıcının, sıralı olarak getirilmeyen bir disk sayfasının maliyetine ilişkin tahmini ayarlar. Varsayılan 4.0’dır. Bu değer, belirli bir tablespace’deki tablo ve indeksler için ilgili tablespace parametresi kullanılarak geçersiz kılınabilir (bkz.
ALTER TABLESPACE).
Bu değerin
seq_page_cost
değerine göre azaltılması, sistemin indeks taramalarını tercih etmesine; yükseltmek ise, indeks taramalarının daha maliyetli görünmesine sebep olacaktır. Aşağıdaki parametrelerde açıklanan CPU maliyetlerine göre disk I / O maliyetlerinin önemini değiştirmek için her iki değeri birlikte artırabilir / azaltabilirsiniz.
Mekanik disk depolamaya rastgele erişim, sıralı erişimden genellikle 4 kattan daha fazla maliyetlidir. Ancak, diske rastgele erişimlerin çoğunun önbellekte olduğu durumlarda ( indekslenmiş okumalar gibi ) daha düşük bir varsayılan kullanılır. Varsayılan değer rastgele erişimi sıralı erişimden 40 kat daha yavaş modellemek olarak düşünülebilir, rastgele okumaların %90’ının önbelleğe alınmasını bekler.
İş yükünüz için %90 önbellek oranının hatalı bir varsayım olduğuna inanıyorsanız, rastgele depolama okumalarının gerçek maliyetini daha iyi yansıtmak için
random_page_cost
‘u artırabilirsiniz. Buna karşılık olarak, verilerinizin tamamen önbellekte olma olasılığı varsa, örneğin veritabanı toplam sunucu belleğinden küçükse,
random_page_cost
‘u düşürmek uygun olabilir. Solid-state sürücüler gibi, sıralı okumaya göre düşük rastgele okuma maliyetine sahip depolamalar daha düşük değerlerle daha verimli modellenebilir
cpu_tuple_cost
type: real
default: 0.01
min: 0
max: 1.79769e+308
context: user
<p>Sets the planner’s estimate of the cost of processing each row during a query. The default is 0.01.</p>
Sorgu sırasında planner’ın her satırı işleme maliyetine ilişkin tahminini ayarlar. Öntanımlı değeri 0.01’dir.
cpu_index_tuple_cost
type: real
default: 0.005
min: 0
max: 1.79769e+308
context: user
<p>Sets the planner’s estimate of the cost of processing each index entry during an index scan. The default is 0.005.</p>
Planlayıcının, bir indesk taraması sırasında her bir indeks girişini işleme maliyetine ilişkin tahminini ayarlar. Öntanımlı değeri 0,005’tir.
cpu_operator_cost
type: real
default: 0.0025
min: 0
max: 1.79769e+308
context: user
<p>Sets the planner’s estimate of the cost of processing each operator or function executed during a query. The default is 0.0025.</p>
Planlayıcının bir sorgu sırasında yürütülen her operatör ve fonksiyonu işleme maliyetine ilişkin tahminini ayarlar. Öntanımlı değeri 0,0025’tir.
parallel_setup_cost
type: real
default: 1000
min: 0
max: 1.79769e+308
context: user
<p>Sets the planner’s estimate of the cost of launching parallel worker processes. The default is 1000.</p>
Planlayıcının paralel worker süreçlerini başlatma maliyetine ilişkin tahminini ayarlar. Öntanımlı değeri 1000’dir.
parallel_tuple_cost
type: real
default: 0.1
min: 0
max: 1.79769e+308
context: user
<p>Sets the planner’s estimate of the cost of transferring one tuple from a parallel worker process to another process. The default is 0.1.</p>
Planlayıcının bir tuple’ı bir paralel worker sürecinde başka bir sürece aktarmanın maliyetine ilişkin tahminini ayarlar. Öntanımlı değeri 0.1’dir.
min_parallel_table_scan_size
type: integer
default: 8 MB
min: 0
max: 715827882
unit: 8kB
context: user
<p>Sets the minimum amount of table data that must be scanned in order for a parallel scan to be considered. For a parallel sequential scan, the amount of table data scanned is always equal to the size of the table, but when indexes are used the amount of table data scanned will normally be less. If this value is specified without units, it is taken as blocks, that is BLCKSZ
bytes, typically 8kB. The default is 8 megabytes (8MB
).</p>
Paralel scan’in dikkate alınması için taranması gereken minimum tablo verisi boyutunu ayarlar. Paralel sequential scan’de taranan tablo verisi miktarı her zaman tablo boyutuna eşittir. İndeks kullanıldığında bu boyut daha az olur. Bu değer birimsiz belirtilirse bloklar ( BLCKSZ bayt, genellikle 8kB’dir ) olarak alınır. Öntanımlı değeri 8 megabayttır (8MB).
min_parallel_index_scan_size
type: integer
default: 512 kB
min: 0
max: 715827882
unit: 8kB
context: user
<p>Sets the minimum amount of index data that must be scanned in order for a parallel scan to be considered. Note that a parallel index scan typically won’t touch the entire index; it is the number of pages which the planner believes will actually be touched by the scan which is relevant. This parameter is also used to decide whether a particular index can participate in a parallel vacuum. See sql-vacuum. If this value is specified without units, it is taken as blocks, that is BLCKSZ
bytes, typically 8kB. The default is 512 kilobytes (512kB
).</p>
Paralel scan’in dikkate alınması için taranması gereken minimum indeks verisi boyutunu ayarlar. Paralel indeks scan’in genellikle indeksin tamamına bakmaz. Bu, planlayıcının taramada gerçekten dokunulacağına inandığı ilgili sayfaların sayısıdır. Bu parametre aynı zamanda belirli bir indeksin paralel vacuum katılıp katılamayacağına karar vermek için de kullanılır. ( bkz.
VAKUM). Bu değer birim olmadan belirtilirse bloklar ( BLCKSZ bayt, genellikle 8kB’dir ) olarak alınır. Öntanımlı değeri 512 kilobayttır (512kB).
effective_cache_size
type: integer
default: 4 GB
min: 1
max: 2147483647
unit: 8kB
context: user
<p>Sets the planner’s assumption about the effective size of the disk cache that is available to a single query. This is factored into estimates of the cost of using an index; a higher value makes it more likely index scans will be used, a lower value makes it more likely sequential scans will be used. When setting this parameter you should consider both PostgreSQL’s shared buffers and the portion of the kernel’s disk cache that will be used for PostgreSQL data files, though some data might exist in both places. Also, take into account the expected number of concurrent queries on different tables, since they will have to share the available space. This parameter has no effect on the size of shared memory allocated by PostgreSQL, nor does it reserve kernel disk cache; it is used only for estimation purposes. The system also does not assume data remains in the disk cache between queries. If this value is specified without units, it is taken as blocks, that is BLCKSZ
bytes, typically 8kB. The default is 4 gigabytes (4GB
). (If BLCKSZ
is not 8kB, the default value scales proportionally to it.)</p>
Planlayıcının, bir sorgu için kullanılabilir etkin disk önbelleği 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 parametreyi ayarlarken, PostgreSQL shared buffer ve veri dosyalarını içeren işletim sistemi önbelleğini dikkate alınmalıdır. Bazı veriler her ikisinde de mevcut olabilir. Ayrıca, farklı tablolardaki eşzamanlı sorgu sayısını, kullanılabilir alanı paylaşmak zorunda kalacakları için dikkate alın. Bu parametrenin PostgreSQL tarafından ayrılan shared memory boyutu ve çekirdek disk önbelleği üzerinde bir etkisi yoktur. Sadece tahmin amaçlı kullanılır. Bu değer birisiz belirtildiğinde bloklar olarak alınır (BLCKSZ bayt, genellikle 8kB’dir). Öntanımlı değeri 4 gigabayttır (4 GB). BLCKSZ 8kB değilse, varsayılan değer bununla orantılı olarak ölçeklenir.
jit_above_cost
type: real
default: 100000
min: -1
max: 1.79769e+308
context: user
<p>Sets the query cost above which JIT compilation is activated, if enabled (see jit). Performing JIT costs planning time but can accelerate query execution. Setting this to -1
disables JIT compilation. The default is 100000
.</p>
Etkinleştirilmişse, JIT ( Just-in-Time ) derlemesinin aktif olduğu sorgu maliyetini belirtir bkz.
. JIT gerçekleştirmek, planlama süresi maliyeti getirir ancak sorgu yürütmeyi hızlandırabilir. Bu parametreyi -1 olarak ayarlamak JIT derlemesini devre dışı bırakır. Öntanımlı değeri 100000’dir.
jit_inline_above_cost
type: real
default: 500000
min: -1
max: 1.79769e+308
context: user
<p>Sets the query cost above which JIT compilation attempts to inline functions and operators. Inlining adds planning time, but can improve execution speed. It is not meaningful to set this to less than jit_above_cost
. Setting this to -1
disables inlining. The default is 500000
.</p>
JIT derlemesinin, inline işlevler ve operatörler yapmaya çalıştığı sorgu maliyetini belirtir. Inlining, planlama süresini beraberinde getirir ancak yürütme hızını artırabilir. Bu paremetreyi jit_above_cost
‘tan daha küçük bir değere ayarlamak anlamlı değildir. Bu parametre için -1 değeri Inlining’i devre dışı bırakır. Öntanımlı değeri 500000’dir.
jit_optimize_above_cost
type: real
default: 500000
min: -1
max: 1.79769e+308
context: user
<p>Sets the query cost above which JIT compilation applies expensive optimizations. Such optimization adds planning time, but can improve execution speed. It is not meaningful to set this to less than jit_above_cost
, and it is unlikely to be beneficial to set it to more than jit_inline_above_cost
. Setting this to -1
disables expensive optimizations. The default is 500000
.</p>
JIT derlemesinin maliyetli optimizasyonları uyguladığı sorgu maliyetini ayarlar. Bu tür bir optimizasyon planlama süresine mal olur, ancak yürütme hızını artırabilir. Bu parametreyi, jit_above_cost
‘tan daha küçük bir değere ayarlamak anlamlı değildir ve jit_inline_above_cost
‘tan daha fazlasına ayarlamak pek faydalı olmayacaktır. Bu parametre için -1 değeri maliyetli optimizasyonları devre dışı bırakır. Öntanımlı değeri 500000’dir.
Genetic Query Optimizer
Genetic query optimizer (GEQO), sezgisel arama (heuristic searching) kullanarak sorgu planlaması yapan bir algoritmadır. GEQO karmaşık sorgular için planlama süresini azaltır.
geqo
type: bool
default: on
context: user
<p>Enables or disables genetic query optimization. This is on by default. It is usually best not to turn it off in production; the geqo_threshold
variable provides more granular control of GEQO.</p>
Genetik sorgu optimizasyonunu etkinleştirir / devre dışı bırakır. Varsayılan açıktır. Production’da kapatmamak tavsiye edilir. geqo_threshold
parametresi, GEQO’nun daha ayrıntılı denetimini sağlar.
geqo_threshold
type: integer
default: 12
min: 2
max: 2147483647
context: user
<p>Use genetic query optimization to plan queries with at least this many FROM
items involved. (Note that a FULL OUTER JOIN
construct counts as only one FROM
item.) The default is 12. For simpler queries it is usually best to use the regular, exhaustive-search planner, but for queries with many tables the exhaustive search takes too long, often longer than the penalty of executing a suboptimal plan. Thus, a threshold on the size of the query is a convenient way to manage use of GEQO.</p>
En az bu parametre değeri kadar FROM öğesi içeren sorguları planlamak için genetik sorgu optimizasyonunu kullanır. Bir FULL OUTER JOIN
yapısı yalnızca bir FROM öğesi olarak sayılır. Öntanımlı değeri 12’dir. Daha basit sorgular için normal (exhaustive-search) planlayıcı yeterlidir. Birden çok tablo içeren sorgular için exhaustive-search genellikle yetersiz bir planı uyguladığından uzun sürer. Bu nedenle, sorgunun boyutuna ilişkin bir eşik, GEQO kullanımını yönetmenin uygun bir yoludur.
geqo_effort
type: integer
default: 5
min: 1
max: 10
context: user
<p>Controls the trade-off between planning time and query plan quality in GEQO. This variable must be an integer in the range from 1 to 10. The default value is five. Larger values increase the time spent doing query planning, but also increase the likelihood that an efficient query plan will be chosen.</p><p>geqo_effort
doesn’t actually do anything directly; it is only used to compute the default values for the other variables that influence GEQO behavior (described below). If you prefer, you can set the other parameters by hand instead.</p>
GEQO’da planlama süresi ve sorgu planı kalitesi arasındaki dengeyi kontrol eder. Bu değişken, 1 ile 10 arasında değerler alır. Öntanımlı değeri 5’tir. Daha büyük değerler sorgu planlaması için harcanan zamanı artırırken verimli bir sorgu planının seçilme olasılığını artırır.
geqo_effort
aslında doğrudan hiçbir şey yapmaz, yalnızca GEQO davranışını etkileyen diğer değişkenlerin varsayılan değerlerini hesaplamak için kullanılır. Diğer parametreleri isterseniz elle de ayarlayabilirsiniz.
geqo_pool_size
type: integer
default: 0
min: 0
max: 2147483647
context: user
<p>Controls the pool size used by GEQO, that is the number of individuals in the genetic population. It must be at least two, and useful values are typically 100 to 1000. If it is set to zero (the default setting) then a suitable value is chosen based on geqo_effort
and the number of tables in the query.</p>
GEQO tarafından kullanılan havuz boyutunu kontrol eder. Bu değer en az 2 olmalıdır, önerilen değerler 100 ile 1000 arasıdır. 0 olarak ayarlanırsa (öntanımlı ayar), geqo_effort
ve sorgudaki tabloların sayısına göre uygun bir değer seçilir.
geqo_generations
type: integer
default: 0
min: 0
max: 2147483647
context: user
<p>Controls the number of generations used by GEQO, that is the number of iterations of the algorithm. It must be at least one, and useful values are in the same range as the pool size. If it is set to zero (the default setting) then a suitable value is chosen based on geqo_pool_size
.</p>
GEQO tarafından kullanılan nesil sayısını, yani algoritmanın iteration sayısını kontrol eder. Bu değer en az 1 olmalıdır. Önerilen değerler havuz boyutuyla aynı aralıktadır. 0 değerine (varsayılan) ayarlandığında geqo_pool_size
‘a dayalı uygun bir değer seçilir.
geqo_selection_bias
type: real
default: 2
min: 1.5
max: 2
context: user
<p>Controls the selection bias used by GEQO. The selection bias is the selective pressure within the population. Values can be from 1.50 to 2.00; the latter is the default.</p>
GEQO tarafından kullanılan seçim eğilimini denetler. Seçim eğilimi, popülasyon içindeki seçici baskıdır. 1,50 ile 2,00 arasında değerler alabilir. 2.0 varsayılandır.
geqo_seed
type: real
default: 0
min: 0
max: 1
context: user
<p>Controls the initial value of the random number generator used by GEQO to select random paths through the join order search space. The value can range from zero (the default) to one. Varying the value changes the set of join paths explored, and may result in a better or worse best path being found.</p>
GEQO tarafından rastgele yollar seçmek için kullanılan rastgele sayı üretecinin başlangıç değerini kontrol eder. Değer 0 (varsayılan) ile 1 arasında değerler alır. Değerin değiştirilmesi, keşfedilen birleştirme yolları kümesini değiştirir ve daha iyi / kötü bir yolun bulunmasıyla sonuçlanabilir.
Diğer Planlayıcı Seçenekleri
default_statistics_target
type: integer
default: 100
min: 1
max: 10000
context: user
<p>Sets the default statistics target for table columns without a column-specific target set via ALTER TABLE SET STATISTICS. Larger values increase the time needed to do ANALYZE, but might improve the quality of the planner’s estimates. The default is 100. For more information on the use of statistics by the PostgreSQL query planner, refer to planner-stats.</p>
ALTER TABLE SET STATISTICS
ile sütuna özgü bir hedef ayarlanmamış tablo sütunları için varsayılan istatistik hedefini ayarlar. Daha büyük değerler ANALYZE yapmak için gereken maliyeti artırmakla birlikte planlayıcının tahmin kalitesini artırabilir. Öntanımlı değeri 100’dür. PostgreSQL sorgu planlayıcı tarafından istatistiklerin kullanımı hakkında daha fazla bilgi için bkz.
.
constraint_exclusion
type: enum
default: partition
context: user
values: [partition, on, off]
<p>Controls the query planner’s use of table constraints to optimize queries. The allowed values of constraint_exclusion
are on
(examine constraints for all tables), off
(never examine constraints), and partition
(examine constraints only for inheritance child tables and UNION ALL
subqueries). partition
is the default setting. It is often used with traditional inheritance trees to improve performance.</p><p>When this parameter allows it for a particular table, the planner compares query conditions with the table’s CHECK
constraints, and omits scanning tables for which the conditions contradict the constraints. For example:CREATE TABLE parent(key integer, …);CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent);CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent);…SELECT * FROM parent WHERE key = 2400; With constraint exclusion enabled, this SELECT will not scan child1000 at all, improving performance.</p><p>Currently, constraint exclusion is enabled by default only for cases that are often used to implement table partitioning via inheritance trees. Turning it on for all tables imposes extra planning overhead that is quite noticeable on simple queries, and most often will yield no benefit for simple queries. If you have no tables that are partitioned using traditional inheritance, you might prefer to turn it off entirely. (Note that the equivalent feature for partitioned tables is controlled by a separate parameter, enable_partition_pruning
.)</p><p>Refer to ddl-partitioning-constraint-exclusion for more information on using constraint exclusion to implement partitioning.</p>
Sorgu planlayıcısının sorguları optimize etmek için tablo kısıtlamalarını kullanmasını kontrol eder. constraint_exclusion
parametresinin alabileceği değerler on
(tüm tablolar için kısıtlamaları incele), off
(kısıtlamaları asla inceleme) ve partition
(kısıtlamaları yalnızca inheritance child tabloları ve UNION ALL alt sorguları için incele). partition
varsayılan ayardır. Genellikle performansı artırmak için geleneksel inheritance trees birlikte kullanılır.
Bu parametre belirli bir tablo için izin verdiğinde, planlayıcı sorgu koşullarını tablonun CHECK kısıtlamalarıyla karşılaştırır ve koşulların kısıtlamalarla çeliştiği tarama tablolarını atlar. Örneğin:
CREATE TABLE parent(key integer, ...);
CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent);
CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent);
...
SELECT * FROM parent WHERE key = 2400;
constraint exclusion etkinleştirildiğinde, verilen SELECT, child1000’i hiç taramayacak ve performans artacaktır.
Şu anda constraint exclusion, yalnızca kalıtım ağaçları (inheritance tree) aracılığıyla partitioning yapmak için varsayılan olarak etkinleştirilmiştir. Bunu tüm tablolar için açmak, basit sorgularda kayda değer derecede ekstra planlama yükü getirir, çoğu durumda basit sorgular için hiçbir fayda sağlamaz. Geleneksel kalıtım kullanılarak bölümlenmiş tablonuz yoksa tamamen kapatılabilir.
Partitioning için constraint exclusion kullanımı hakkında daha fazla bilgi için bkz.
.
cursor_tuple_fraction
type: real
default: 0.1
min: 0
max: 1
context: user
<p>Sets the planner’s estimate of the fraction of a cursor’s rows that will be retrieved. The default is 0.1. Smaller values of this setting bias the planner towards using fast start plans for cursors, which will retrieve the first few rows quickly while perhaps taking a long time to fetch all rows. Larger values put more emphasis on the total estimated time. At the maximum setting of 1.0, cursors are planned exactly like regular queries, considering only the total estimated time and not how soon the first rows might be delivered.</p>
Planlayıcının, imleç satırlarının alınacak kısmına ilişkin tahminini ayarlar. Öntanımlı değeri 0.1’dir. Bu parametre için daha küçük değerler planlayıcıyı imleçler için ‘fast start’ planlarını kullanmaya yönlendirir. Bu şekilde, ilk birkaç satırı hızlı bir şekilde alırnırken tüm satırları getirmesi uzun zaman alabilir. Daha büyük değerler, toplam tahmini süreye daha fazla önem verir. Maksimum 1.0 ayarında, imleçler tam olarak normal sorgular gibi planlanarak ilk satırların ne kadar çabuk teslim edilebileceğini değil, yalnızca toplam tahmini süreyi göz önünde bulundurur.
from_collapse_limit
type: integer
default: 8
min: 1
max: 2147483647
context: user
<p>The planner will merge sub-queries into upper queries if the resulting FROM
list would have no more than this many items. Smaller values reduce planning time but might yield inferior query plans. The default is eight. For more information see explicit-joins.</p><p>Setting this value to geqo_threshold
or more may trigger use of the GEQO planner, resulting in non-optimal plans. See runtime-config-query-geqo.</p>
Planlayıcı, sonuçta ortaya çıkan FROM listesi bu değerden çok öğe içermiyorsa, alt sorguları üst sorgularda birleştirir. Daha küçük değerler planlama süresini azaltır, ancak daha kalitesiz sorgu planlarına neden olabilir. Öntanımlı değeri 8’dir. Daha fazla bilgi için bkz
.
Bu değerin
geqo_threshold
‘a veya daha fazlasına ayarlanması, GEQO planlayıcısının kullanımını tetikleyerek optimal olmayan planlarla sonuçlanabilir.
jit
type: bool
default: on
context: user
<p>Determines whether JIT compilation may be used by PostgreSQL, if available (see jit). The default is on
.</p>
JIT derlemesinin PostgreSQL tarafından kullanılıp kullanılamayacağını belirler bkz.
. Varsayılan açıktır.
join_collapse_limit
type: integer
default: 8
min: 1
max: 2147483647
context: user
<p>The planner will rewrite explicit JOIN
constructs (except FULL JOIN
s) into lists of FROM
items whenever a list of no more than this many items would result. Smaller values reduce planning time but might yield inferior query plans.</p><p>By default, this variable is set the same as from_collapse_limit
, which is appropriate for most uses. Setting it to 1 prevents any reordering of explicit JOIN
s. Thus, the explicit join order specified in the query will be the actual order in which the relations are joined. Because the query planner does not always choose the optimal join order, advanced users can elect to temporarily set this variable to 1, and then specify the join order they desire explicitly. For more information see explicit-joins.</p><p>Setting this value to geqo_threshold
or more may trigger use of the GEQO planner, resulting in non-optimal plans. See runtime-config-query-geqo.</p>
Bu parametre değerinden az öğe içeren bir liste ortaya çıktığında planlayıcı explicit JOIN yapılarını (FULL JOIN’ler hariç) FROM-list’de yeniden yazar. Daha küçük değerler planlama süresini azaltır, ancak daha kalitesiz sorgu planlarına neden olabilir.
Bu değişken, varsayılan olarak çoğu kullanım için uygun olan
from_collapse_limit
parametresi ile aynı şekilde ayarlanır. 1 olarak ayarlamak, explicit JOIN’lerin yeniden sıralanmasını önler. Bu nedenle, sorguda belirtilen explicit join sırası, ilişkiler join edildikten sonra değişmez. Daha fazla bilgi için bkz.
.
Bu değerin
geqo_threshold
veya daha fazlasına ayarlanması, GEQO planlayıcısının kullanımını tetikleyerek optimal olmayan planlar getirebilir. bkz.
Genetic Query Optimizer.
parallel_leader_participation
type: bool
default: on
context: user
<p>Allows the leader process to execute the query plan under Gather
and Gather Merge
nodes instead of waiting for worker processes. The default is on
. Setting this value to off
reduces the likelihood that workers will become blocked because the leader is not reading tuples fast enough, but requires the leader process to wait for worker processes to start up before the first tuples can be produced. The degree to which the leader can help or hinder performance depends on the plan type, number of workers and query duration.</p>
Lider sürecin, worker süreçleri beklemek yerine Gather
ve Gather Merge
düğümleri altında sorgu planı yürütmesini kontrol eder. Varsayılan on
‘dur. Bu parametrenin off
olarak ayarlanması, liderin yeterince hızlı tuple’ları okumaması nedeniyle worker’ların bloke olma ihtimalini azaltır. Ancak lider süreç ilk tuple’lar üretilmeden önce worker süreçlerin başlamasını beklemelidir. Liderin performansa ne ölçüde yardımcı olabileceği veya performansı engelleyebileceği, plan türüne, worker sayısına ve sorgu süresine bağlıdır.
force_parallel_mode
type: enum
default: off
context: user
values: [off, on, regress]
<p>Allows the use of parallel queries for testing purposes even in cases where no performance benefit is expected. The allowed values of force_parallel_mode
are off
(use parallel mode only when it is expected to improve performance), on
(force parallel query for all queries for which it is thought to be safe), and regress
(like on
, but with additional behavior changes as explained below).</p><p>More specifically, setting this value to on
will add a Gather
node to the top of any query plan for which this appears to be safe, so that the query runs inside of a parallel worker. Even when a parallel worker is not available or cannot be used, operations such as starting a subtransaction that would be prohibited in a parallel query context will be prohibited unless the planner believes that this will cause the query to fail. If failures or unexpected results occur when this option is set, some functions used by the query may need to be marked PARALLEL UNSAFE
(or, possibly, PARALLEL RESTRICTED
).</p><p>Setting this value to regress
has all of the same effects as setting it to on
plus some additional effects that are intended to facilitate automated regression testing. Normally, messages from a parallel worker include a context line indicating that, but a setting of regress
suppresses this line so that the output is the same as in non-parallel execution. Also, the Gather
nodes added to plans by this setting are hidden in EXPLAIN
output so that the output matches what would be obtained if this setting were turned off
.</p>
Paralel sorgu imkanlarını test amaçlarınız için performans katkısı olmasa dahi kullanmaya zorlar. force_parallel_mode
için geçerli değerler; off
(paralel modu, yalnızca performansı iyileştirmesi beklendiğinde kullanır), on
(güvenli olduğu düşünülen tüm sorgular için paralel sorguyu zorlar) ve regress
(aşağıda açıklanan ek davranışlar ile birlikte on
gibidir).
on
ayarı, herhangi bir sorgu planının üstüne bir Gather
düğümü ekler. Böylece sorgu, bir paralel worker’ın içinde çalıştırılır. Bu seçenek ayarlandığında hatalar veya beklenmeyen sonuçlar ortaya çıktığında, sorgu tarafından kullanılan bazı işlevlerin PARALLEL UNSAFE
veya PARALLEL RESTRICTED
olarak işaretlenmesi gerekebilir.
regress
ayarı, on
ayarının yaptığı etkiler ile beraber otomatik regression testini kolaylaştırmayı amaçlayan bazı ek etkilere sahiptir. Normalde, paralel bir worker’dan gelen mesajlar bunu belirten bir bağlam satırı içerir, ancak regress
ayarı bu satırı bastırır ve çıktı paralel olmayan yürütmeyle aynı olur. Ayrıca, bu ayar ile planlara eklenen Gather
düğümleri EXPLAIN
çıktısında gizlenir. Böylece çıktı, off
durumunda elde edilecek olanla eşleşir.
plan_cache_mode
type: enum
default: auto
context: user
values: [auto, force_generic_plan, force_custom_plan]
<p>Prepared statements (either explicitly prepared or implicitly generated, for example by PL/pgSQL) can be executed using custom or generic plans. Custom plans are made afresh for each execution using its specific set of parameter values, while generic plans do not rely on the parameter values and can be re-used across executions. Thus, use of a generic plan saves planning time, but if the ideal plan depends strongly on the parameter values then a generic plan may be inefficient. The choice between these options is normally made automatically, but it can be overridden with plan_cache_mode
. The allowed values are auto
(the default), force_custom_plan
and force_generic_plan
. This setting is considered when a cached plan is to be executed, not when it is prepared. For more information see sql-prepare.</p>
Prepared statement’lar custom ve generic planlar kullanılarak yürütülebilir. Her bir yürütme için custom planlar, kendine özgü parametre değerleri kümesi kullanılarak baştan yapılırken; generic planlar, parametre değerlerine dayanmaz ve yürütmelerde tekrar kullanılabilir. Bu sebeple, generic bir planın kullanılması planlama süresinden tasarruf sağlar. İdeal plan güçlü bir şekilde parametre değerlerine bağlıysa generic bir plan verimsiz olabilir. Bu seçenekler arasındaki tercih normalde otomatik olarak yapılır.
plan_cache_mode
ile geçersiz kılınabilir. Alabileceği değerler;
auto
(varsayılan),
force_custom_plan
ve
force_generic_plan
‘dır. Daha fazla bilgi için bkz.
PREPARE.
Kaynak:
[1]. PostgreSQL Documentation
[2]. postgresqlco.nf