Ces paramÚtres de configuration fournissent une méthode brutale pour
influencer les plans de requĂȘte choisis par l'optimiseur de requĂȘtes.
Si le plan choisi par dĂ©faut par l'optimiseur pour une requĂȘte
particuliĂšre n'est pas optimal, une solution
temporaire peut provenir de l'utilisation de l'un
de ces paramĂštres de configuration pour forcer l'optimiseur Ă choisir
un plan différent. De meilleures façons d'améliorer la qualité des
plans choisis par l'optimiseur passent par l'ajustement des constantes
de coût du planificateur (voir Section 20.7.2), le lancement manuel plus
fréquent de ANALYZE
,
l'augmentation de la valeur du paramĂštre de configuration default_statistics_target et l'augmentation du nombre
de statistiques récupérées pour des colonnes spécifiques en utilisant
ALTER TABLE SET STATISTICS
.
enable_async_append
(boolean
)
Active ou désactive la possibilité pour le planificateur d'utiliser des
types de plans d'exécution tenant compte du caractÚre asynchrone des
ajouts. La valeur par défaut est on
.
enable_bitmapscan
(boolean
)
Active ou désactive l'utilisation des plans de parcours de bitmap
(bitmap-scan) par
le planificateur de requĂȘtes. ActivĂ© par dĂ©faut (on
).
enable_gathermerge
(boolean
)
Active ou désactive l'utilisation des plans de type gather merge.
La valeur par défaut est on
.
enable_hashagg
(boolean
)
Active ou désactive l'utilisation des plans d'agrégation hachée
(hashed aggregation) par le
planificateur. Activé par défaut (on
).
enable_hashjoin
(boolean
)
Active ou désactive l'utilisation des jointures de hachage
(hash-join) par le
planificateur. Activé par défaut (on
).
enable_incremental_sort
(boolean
)
Active ou désactive l'utilisation des tris incrémentaux par le
planificateur. La valeur par défaut est on
.
enable_indexscan
(boolean
)
Active ou désactive l'utilisation des parcours d'index
(index-scan et
index-only-scan) par le
planificateur. Activé par défaut (on
).
Voir aussi enable_indexonlyscan.
enable_indexonlyscan
(boolean
)
Active ou désactive l'utilisation des parcours d'index seuls
(index-only-scan) par le planificateur
(voir Section 11.9). Activé par défaut
(on
).Le paramĂštre enable_indexscan
doit aussi ĂȘtre activĂ© pour que l'optimiseur considĂšre l'utilisation de
parcours d'index seuls.
enable_material
(boolean
)
Active ou désactive l'utilisation de la matérialisation par le
planificateur. Il est impossible de supprimer complĂštement son
utilisation mais la dĂ©sactivation de cette variable permet d'empĂȘcher
le planificateur d'insĂ©rer des nĆuds de matĂ©rialisation sauf
dans le cas oĂč son utilisation est obligatoire pour des raisons de
justesse de résultat. Activé par défaut (on
).
enable_memoize
(boolean
)
Active ou désactive l'utilisation par le planificateur des résultats des
plans d'éxécution en mémoire pour récupérer les résultats des parcours
paramétrés dans les jointures de type boucle impriquée
(nested loop join). Ce type de plans
permet aux parcours du plan sous-jacent d'ĂȘtre ignorĂ©s quand le rĂ©sultat
des paramÚtres actuels sont déjà en mémoire. Les résultats les moins
frĂ©quents peuvent ĂȘtre sortis de la mĂ©moire lorsqu'il est nĂ©cessaire de
faire de la place pour de nouvelles données. La valeur par défaut est
on
.
enable_mergejoin
(boolean
)
Active ou désactive l'utilisation des jointures de fusion
(merge-join)par le
planificateur. Activé par défaut (on
).
enable_nestloop
(boolean
)
Active ou désactive l'utilisation des jointures de boucles imbriquées
(nested-loop)
par le planificateur. Il n'est pas possible de supprimer
complÚtement les jointures de boucles imbriquées mais la
désactivation de cette variable décourage le planificateur d'en
utiliser une si d'autres méthodes sont disponibles.
Activé par défaut (on
).
enable_parallel_append
(boolean
)
Active ou désactive l'utilisation de plans Append parallélisés.
La valeur par défaut est on
.
enable_parallel_hash
(boolean
)
Active ou désactive l'utilisation des plans parallélisés de jointure
par hachage. N'a pas d'effet si les plans de jointure par hachage ne
sont pas activés. La valeur par défaut est
on
.
enable_partition_pruning
(boolean
)
Active ou désactive la capacité du planificateur à éliminer les
partitions d'une table partitionnée dans les plans d'exécution. Cela
contrÎle aussi la capacité du planificateur à générer des plans de
requĂȘte autorisant l'exĂ©cuteur Ă supprimer (ignorer) les partitions
durant l'exécution. Le défaut est on
.
Voir Section 5.11.4 pour les détails.
enable_partitionwise_join
(boolean
)
Active ou désactive l'utilisation par le planificateur des jointures
entre partitions, qui permettent aux jointures entre tables partitionnées
d'ĂȘtre effectuĂ©es en joignant les partitions correspondantes. Pour le
moment, une jointure entre partitions ne s'applique que si la condition de
jointure inclut toutes les clĂ©s de partition, qui doivent ĂȘtre du mĂȘme
type et avoir exactement les mĂȘmes ensembles de partitions filles.
Avec ce paramĂštre activĂ©, le nombre de nĆuds dont l'utilisation
mémoire est restreinte par work_mem
apparaissant dans
le plan final peut augmenter de façon linéaire suivant le nombre de partitions
parcourues. Ceci peut engendrer une forte augmentation de la consommation de
la mĂ©moire globale lors de l'exĂ©cution de la requĂȘte. La planification de
requĂȘte devient aussi significativement plus coĂ»teuse en terme de mĂ©moire et
de CPU. La valeur par défaut est off
.
enable_partitionwise_aggregate
(boolean
)
Active ou désactive l'utilisation par le planificateur des regroupements
ou agrégations par partition, qui permettent, dans les tables
partitionnées, d'exécuter regroupement ou agrégation séparément pour
chaque partition. Si la clause GROUP BY
n'inclut pas
les clĂ©s de partition, seule une agrĂ©gation partielle peut ĂȘtre
effectuée par partition, et la finalisation interviendra plus tard.
Avec ce paramĂštre activĂ©, le nombre de nĆuds dont l'utilisation
mémoire est restreinte par work_mem
apparaissant dans
le plan final peut augmenter de façon linéaire suivant le nombre de partitions
parcourues. Ceci peut engendrer une forte augmentation de la consommation de
la mĂ©moire globale lors de l'exĂ©cution de la requĂȘte. La planification de
requĂȘte devient aussi significativement plus coĂ»teuse en terme de mĂ©moire et
de CPU. La valeur par défaut est off
.
enable_seqscan
(boolean
)
Active ou désactive l'utilisation des parcours séquentiels
(sequential scan) par le
planificateur. Il n'est pas possible de supprimer complĂštement les
parcours séquentiels mais la désactivation de cette variable décourage le
planificateur d'n utiliser un si d'autres méthodes sont disponibles.
Activé par défaut (on
).
enable_sort
(boolean
)
Active ou désactive l'utilisation des étapes de tri explicite par le
planificateur. Il n'est pas possible de supprimer complĂštement ces tris
mais la désactivation de cette variable décourage le planificateur
d'en utiliser un si d'autres méthodes sont disponibles. Activé par défaut
(on
).
enable_tidscan
(boolean
)
Active ou désactive l'utilisation des parcours de TID par
le planificateur. Activé par défaut (on
).
Les variables de coût décrites dans cette section
sont mesurées sur une échelle arbitraire. Seules leurs valeurs relatives
ont un intĂ©rĂȘt. De ce fait, augmenter ou diminuer leurs valeurs d'un mĂȘme facteur
n'occasione aucun changement dans les choix du planificateur.
Par défaut, ces variables de coût sont basées sur le coût de
récupération séquentielle d'une page ; c'est-à -dire que
seq_page_cost
est, par convention, positionnĂ© Ă
1.0
et les autres variables de coût sont configurées
relativement à cette référence. Il est toutefois possible d'utiliser
une autre échelle, comme les temps d'exécution réels en millisecondes sur
une machine particuliĂšre.
Il n'existe malheureusement pas de mĂ©thode bien dĂ©finie pour dĂ©terminer les valeurs idĂ©ales des variables de coĂ»t. Il est prĂ©fĂ©rable de les considĂ©rer comme moyennes sur un jeu complet de requĂȘtes d'une installation particuliĂšre. Cela signifie que modifier ces paramĂštres sur la seule base de quelques expĂ©riences est trĂšs risquĂ©.
seq_page_cost
(floating point
)Initialise l'estimation faite par le planificateur du coĂ»t de rĂ©cupĂ©ration d'une page disque incluse dans une sĂ©rie de rĂ©cupĂ©rations sĂ©quentielles. La valeur par dĂ©faut est 1.0. Cette valeur peut ĂȘtre surchargĂ©e pour les tables et index d'un tablespace spĂ©cifique en configurant le paramĂštre du mĂȘme nom pour un tablespace (voir ALTER TABLESPACE).
random_page_cost
(floating point
)Initialise l'estimation faite par le planificateur du coĂ»t de rĂ©cupĂ©ration non-sĂ©quentielle d'une page disque. MesurĂ©e comme un multiple du coĂ»t de rĂ©cupĂ©ration d'une page sĂ©quentielle, sa valeur par dĂ©faut est 4.0. Cette valeur peut ĂȘtre surchargĂ©e pour les tables et index d'un tablespace spĂ©cifique en configurant le paramĂštre du mĂȘme nom pour un tablespace (voir ALTER TABLESPACE).
Réduire cette valeur par rapport à seq_page_cost
incite le systÚme à privilégier les parcours d'index ;
l'augmenter donne l'impression de parcours d'index plus
coĂ»teux. Les deux valeurs peuvent ĂȘtre augmentĂ©es ou diminuĂ©es
concomitament pour modifier l'importance des coûts d'entrées/sorties disque
par rapport aux coûts CPU, décrits par les paramÚtres qui suivent.
Les accĂšs alĂ©atoires sur du stockage mĂ©canique sont gĂ©nĂ©ralement bien plus coĂ»teux que quatre fois un accĂšs sĂ©quentiel. NĂ©anmoins, une valeur plus basse est utilisĂ©e (4,0) car la majoritĂ© des accĂšs disques alĂ©atoires, comme les lectures d'index, est supposĂ©e survenir en cache. La valeur par dĂ©faut peut ĂȘtre vu comme un modĂšle d'accĂšs alĂ©atoire 40 fois plus lent que l'accĂšs sĂ©quentiel, en supposant que 90% des lectures alĂ©atoires se font en cache.
Si vous pensez qu'un taux de 90% est incorrect dans votre cas, vous pouvez
augmenter la valeur du paramĂštre random_page_cost pour que cela
corresponde mieux au coĂ»t rĂ©el d'un accĂšs alĂ©atoire. De la mĂȘme façon, si
vos donnĂ©es ont tendance Ă ĂȘtre entiĂšrement en cache (par exemple quand
la base de données est plus petite que la quantité de mémoire du serveur),
diminuer random_page_cost peut ĂȘtre appropriĂ©. Le stockage qui a un coĂ»t
de lecture aléatoire faible par rapport à du séquentiel (par exemple les
disques SSD) peut aussi ĂȘtre mieux tenu en compte avec une valeur plus
faible pour random_page_cost, par exemple 1.1
.
Bien que le systĂšme permette de configurer
random_page_cost
à une valeur inférieure à celle
de seq_page_cost
, cela n'a aucun intĂ©rĂȘt.
En revanche, les configurer Ă des valeurs identiques prend tout son
sens si la base tient entiĂšrement dans le cache en RAM. En effet, dans ce
cas, il n'est pas pénalisant d'atteindre des pages qui ne se suivent
pas. De plus, dans une base presque entiĂšrement en cache, ces valeurs
peuvent ĂȘtre abaissĂ©es relativement aux paramĂštres CPU car le coĂ»t de
récupération d'une page déjà en RAM est bien moindre à celui de sa
récupération sur disque.
cpu_tuple_cost
(floating point
)Initialise l'estimation faite par le planificateur du coĂ»t de traitement de chaque ligne lors d'une requĂȘte. La valeur par dĂ©faut est 0.01.
cpu_index_tuple_cost
(floating point
)Initialise l'estimation faite par le planificateur du coût de traitement de chaque entrée de l'index lors d'un parcours d'index. La valeur par défaut est 0.005.
cpu_operator_cost
(floating point
)Initialise l'estimation faite par le planificateur du coĂ»t de traitement de chaque opĂ©rateur ou fonction exĂ©cutĂ©e dans une requĂȘte. La valeur par dĂ©faut est 0.0025.
parallel_setup_cost
(floating point
)
Configure le coût estimé par l'optimiseur pour le lancement de processus de travail parallÚle. La valeur par défaut est 1000.
parallel_tuple_cost
(floating point
)
Configure le coût estimé par l'optimiseur pour le transfert d'une ligne d'un processus de travail parallÚle à un autre. La valeur par défaut est 0,1.
min_parallel_table_scan_size
(integer
)
SpĂ©cifie la quantitĂ© minimale de donnĂ©e de la table qui doit ĂȘtre
parcourue pour qu'un parcours parallÚle soit envisagé. Pour un
parcours séquentiel parallÚle, la quantité de données de la table
parcourue est toujours égale à la taille de la table, mais quand des
index sont utilisés la quantité de données de la table parcourue sera
normalement moindre. Si cette valeur est spécifiée sans unité, elle
est comprise comme un nombre de blocs, autrement dit
BLCKSZ
octets, typiquement 8 Ko. La valeur par défaut
est 8 Mo (8MB
).
min_parallel_index_scan_size
(integer
)
SpĂ©cifie la quantitĂ© minimale de donnĂ©e d'index qui doit ĂȘtre
parcourue pour qu'un parcours parallÚle soit envisagé. Veuillez noter
qu'un parcours d'index parallÚle ne touchera en général pas la
totalité de l'index ; il s'agit du nombre de page que
l'optimisateur pensera réellement toucher durant le parcours qui est
important. Ce paramÚtre est aussi utilisé pour décider si un index
particulier peut participer à un vacuum parallélisé. Voir VACUUM. Si cette valeur est spécifiée sans unité, elle
est comprise comme un nombre de blocs, autrement dit
BLCKSZ
octets, typiquement 8 Ko. La valeur par défaut
est 512 kilooctets (512kB
).
effective_cache_size
(integer
)
Initialise l'estimation faite par le planificateur de la taille
rĂ©elle du cache disque disponible pour une requĂȘte. Ce paramĂštre est
lié à l'estimation du coût d'utilisation d'un index ; une valeur
importante favorise les parcours d'index, une valeur faible les
parcours séquentiels. Pour configurer ce paramÚtre, il est important
de considérer à la fois les tampons partagés de
PostgreSQL et la portion de cache disque
du noyau utilisée pour les fichiers de données de
PostgreSQL, bien que certaines données pourraient
ĂȘtre prĂ©sentes aux deux endroits. Il faut Ă©galement tenir
compte du nombre attendu de requĂȘtes concurrentes sur des tables
différentes car elles partagent l'espace disponible. Ce paramÚtre n'a
pas d'influence sur la taille de la mémoire partagée allouée par
PostgreSQL, et ne réserve pas non plus le
cache disque du noyau ; il n'a qu'un rĂŽle estimatif. Le systĂšme
ne suppose pas non plus que les données reste dans le cache du disque
entre des requĂȘtes. Si cette valeur est indiquĂ©e sans unitĂ©, elle est
pris comme un nombre de blocs, autrement dit BLCKSZ
octets, typiquement 8 Ko. La valeur par défaut est de 4 Go
(4GB
). (Si BLCKSZ
n'est pas 8 Ko, les
valeurs par défaut changent de façon proportionnée.)
jit_above_cost
(floating point
)
Configure le coĂ»t de la requĂȘte au-dessus duquel la compilation JIT
est activée (voir Chapitre 32). Exécuter
JIT coûte en temps de planification mais peut
accĂ©lĂ©rer l'exĂ©cution de la requĂȘte. Configurer ce paramĂštre Ă
-1
désactive la compilation JIT. Le défaut est
100000
.
jit_inline_above_cost
(floating point
)
Configure le coĂ»t de requĂȘte au-dessus duquel la compilation JIT tente
de mettre à plat fonctions et opérateurs. Ceci ajoute au temps de
planification mais peut améliorer la durée d'exécution. Il n'y a pas
de sens à le configurer à une valeur inférieure à celle de
jit_above_cost
. Le configurer Ă
-1
désactive cette mise à plat. Le défaut est
500000
.
jit_optimize_above_cost
(floating point
)
Configure le coĂ»t de requĂȘte au-dessus duquel la compilation JIT
utilise aussi les optimisations coûteuses. De telles optimisations
ajoutent au temps de planification mais peuvent améliorer la durée
d'exécution. Il n'y a pas de sens à le configurer à une valeur
inférieure à celle de jit_above_cost
, et il y a peu
d'intĂ©rĂȘt Ă le configurer Ă une valeur supĂ©rieure Ă
jit_inline_above_cost
. Le configurer Ă
-1
désactive ces optimisations. Le défaut est
500000
.
L'optimiseur gĂ©nĂ©tique de requĂȘte (GEQO) est un algorithme qui fait la planification d'une requĂȘte en utilisant une recherche heuristique. Cela rĂ©duit le temps de planification pour les requĂȘtes complexes (celles qui joignent de nombreuses relations), au prix de plans qui sont quelques fois infĂ©rieurs Ă ceux trouvĂ©s par un algorithme exhaustif. Pour plus d'informations, voir Chapitre 60.
geqo
(boolean
)
Active ou dĂ©sactive l'optimisation gĂ©nĂ©tique des requĂȘtes. ActivĂ© par
défaut. Il est généralement préférable de ne pas le désactiver sur un
serveur en production. La variable geqo_threshold
fournit un moyen plus granulaire de désactiver le GEQO.
geqo_threshold
(integer
)
L'optimisation gĂ©nĂ©tique des requĂȘtes est utilisĂ©e pour planifier les
requĂȘtes si, au minimum, ce nombre d'Ă©lĂ©ments est impliquĂ© dans la clause
FROM
(une construction FULL OUTER JOIN
ne compte que pour un élément du FROM
). La valeur par
dĂ©faut est 12. Pour des requĂȘtes plus simples, il est prĂ©fĂ©rable d'utiliser
le planificateur standard, Ă recherche exhaustive. Par contre, pour les requĂȘtes
avec un grand nombre de tables, la recherche exhaustive prend trop de temps,
souvent plus de temps que la pénalité à l'utilisation d'un plan non optimal.
Du coup, une limite sur la taille de la requĂȘte est un moyen simple de gĂ©rer
l'utilisation de GEQO.
geqo_effort
(integer
)ContrĂŽle le compromis entre le temps de planification et l'efficacitĂ© du plan de requĂȘte dans GEQO. Cette variable est un entier entre 1 et 10. La valeur par dĂ©faut est de cinq. Des valeurs plus importantes augmentent le temps passĂ© Ă la planification de la requĂȘte mais aussi la probabilitĂ© qu'un plan de requĂȘte efficace soit choisi.
geqo_effort
n'a pas d'action directe ;
il est simplement utilisé pour calculer les
valeurs par défaut des autres variables influençant le
comportement de GEQO (décrites ci-dessous). Il est également
possible de les configurer manuellement.
geqo_pool_size
(integer
)
ContrÎle la taille de l'ensemble utilisé par GEQO. C'est-à -dire
le nombre d'individus au sein d'une population génétique. Elle
doit ĂȘtre au minimum Ă©gale Ă deux, les valeurs utiles Ă©tant
généralement comprises entre 100 et 1000. Si elle est configurée
à zéro (valeur par défaut), alors une valeur convenable est choisie
en fonction de geqo_effort
et du nombre de
tables dans la requĂȘte.
geqo_generations
(integer
)
ContrÎle le nombre de générations utilisées par GEQO.
C'est-Ă -dire le nombre d'itĂ©rations de l'algorithme. Il doit ĂȘtre au
minimum de un, les valeurs utiles se situent dans la mĂȘme plage que la
taille de l'ensemble. S'il est configuré à zéro (valeur par
défaut), alors une valeur convenable est choisie en fonction de
geqo_pool_size
.
geqo_selection_bias
(floating point
)ContrÎle le biais de sélection utilisé par GEQO. C'est-à -dire la pression de sélectivité au sein de la population. Les valeurs s'étendent de 1.50 à 2.00 (valeur par défaut).
geqo_seed
(floating point
)ContrÎle la valeur initiale du générateur de nombres aléatoires utilisé par GEQO pour sélectionner des chemins au hasard dans l'espace de recherche des ordres de jointures. La valeur peut aller de zéro (valeur par défaut) à un. Varier la valeur modifie l'ensemble des chemins de jointure explorés et peut résulter en des chemins meilleurs ou pires.
default_statistics_target
(integer
)
Initialise la cible de statistiques par défaut pour les colonnes de
table pour lesquelles aucune cible de colonne spécifique n'a été configurée via
ALTER TABLE SET STATISTICS
. Des valeurs élevées
accroissent le temps nécessaire à l'exécution
d'ANALYZE
mais peuvent permettre d'améliorer la
qualité des estimations du planificateur. La valeur par
défaut est 100. Pour plus d'informations sur l'utilisation des
statistiques par le planificateur de requĂȘtes, se rĂ©fĂ©rer Ă la
Section 14.2.
constraint_exclusion
(enum
)
ContrĂŽle l'utilisation par le planificateur de requĂȘte des contraintes
pour optimiser les requĂȘtes.
Les valeurs autorisées de constraint_exclusion
sont
on
(examiner les contraintes pour toutes les tables),
off
(ne jamais examiner les contraintes) et
partition
(n'examiner les contraintes que pour les
tables enfants d'un hĂ©ritage et pour les sous-requĂȘtes UNION ALL
).
partition
est la valeur par défaut. C'est souvent
utilisé avec les tables héritées pour améliorer les performances.
Quand ce paramĂštre l'autorise pour une table particuliĂšre, le planificateur
compare les conditions de la requĂȘte avec les contraintes CHECK
sur la table, et omet le parcourt des tables pour lesquelles les
conditions contredisent les contraintes. Par exemple :
CREATE TABLE parent(clef integer, ...); CREATE TABLE fils1000(check (clef between 1000 and 1999)) INHERITS(parent); CREATE TABLE fils2000(check (clef between 2000 and 2999)) INHERITS(parent); ... SELECT * FROM parent WHERE clef = 2400;
Avec l'activation de l'exclusion par contraintes, ce SELECT
ne parcourt pas fils1000
, ce qui améliore les
performances.
Ă l'heure actuelle, l'exclusion de contraintes est activĂ©e par dĂ©faut seulement pour les cas souvent utilisĂ©s pour implĂ©menter le partitionnement de tables via les arbres d'hĂ©ritage. L'activer pour toutes les tables impose une surcharge de planification qui est visible pour de simples requĂȘtes, sans apporter de bĂ©nĂ©fices pour ces requĂȘtes. Si vous n'avez pas de tables partitionnĂ©es utilisant l'hĂ©ritage traditionnel, vous pourriez vouloir le dĂ©sactiver. (Notez que la fonctionnalitĂ© Ă©quivalente pour les tables partitionnĂ©es est contrĂŽlĂ©e par un paramĂštre sĂ©parĂ©, enable_partition_pruning.)
Reportez vous à Section 5.11.5 pour plus d'informations sur l'utilisation d'exclusion de contraintes pour implémenter le partitionnement.
cursor_tuple_fraction
(floating point
)Positionne la fraction, estimĂ©e par le planificateur, d'enregistrements d'un curseur qui sera rĂ©cupĂ©rĂ©e. La valeur par dĂ©faut est 0.1. Des valeurs plus petites de ce paramĂštre rendent le planificateur plus enclin Ă choisir des plans Ă dĂ©marrage rapide (« fast start »), qui rĂ©cupĂšreront les premiers enregistrements rapidement, tout en mettant peut ĂȘtre un temps plus long Ă rĂ©cupĂ©rer tous les enregistrements. Des valeurs plus grandes mettent l'accent sur le temps total estimĂ©. Ă la valeur maximum 1.0 du paramĂštre, les curseurs sont planifiĂ©s exactement comme des requĂȘtes classiques, en ne prenant en compte que le temps total estimĂ© et non la vitesse Ă laquelle les premiers enregistrements seront fournis.
from_collapse_limit
(integer
)
Le planificateur assemble les sous-requĂȘtes dans des requĂȘtes
supérieures si la liste FROM
résultante contient
au plus ce nombre d'éléments. Des valeurs faibles réduisent le temps
de planification mais conduisent Ă des plans de requĂȘtes infĂ©rieurs.
La valeur par défaut est de 8. Pour plus d'informations, voir Section 14.3.
Configurer cette valeur à geqo_threshold ou plus pourrait déclencher l'utilisation du planificateur GEQO, ce qui pourrait aboutir à la génération de plans non optimaux. Voir Section 20.7.3.
jit
(boolean
)
DĂ©termine si la compilation JIT peut ĂȘtre utilisĂ©e
par PostgreSQL, quand elle est disponible
(voir Chapitre 32). La valeur par défaut est
on
.
join_collapse_limit
(integer
)
Le planificateur réécrit les constructions JOIN
explicites (Ă l'exception de FULL JOIN
) en une
liste d'éléments FROM
Ă chaque fois qu'il n'en
résulte qu'une liste ne contenant pas plus de ce nombre
d'éléments. Des valeurs faibles réduisent le temps de
planification mais conduisent Ă des plans de requĂȘtes infĂ©rieurs.
Par dĂ©faut, cette variable a la mĂȘme valeur que
from_collapse_limit
, valeur adaptée à la
plupart des utilisations. Configurer cette variable Ă 1
empĂȘche le rĂ©ordonnancement des JOIN
tures explicites.
De ce fait, l'ordre des jointures explicites indiquĂ© dans la requĂȘte
est l'ordre réel dans lequel les relations
sont jointes. Le planificateur de la requĂȘte ne choisit pas toujours
l'ordre de jointure optimal ; les utilisateurs aguerris peuvent
choisir d'initialiser temporairement cette variable Ă 1 et
d'indiquer explicitement l'ordre de jointure souhaité.
Pour plus d'informations, voir Section 14.3.
Configurer cette valeur à geqo_threshold ou plus pourrait déclencher l'utilisation du planificateur GEQO, ce qui pourrait aboutir à la génération de plans non optimaux. Voir Section 20.7.3.
plan_cache_mode
(enum
)
Les requĂȘtes prĂ©parĂ©es (soit explicitement prĂ©parĂ©es soit
implicitement gĂ©nĂ©rĂ©es, par exemple dans PL/pgSQL) peuvent ĂȘtre
exécutées en utilisant des plans personnalisés ou génériques. Les
plans personnalisés sont de nouveau créés à chaque exécution en
utilisant son ensemble spécifique de valeurs de paramÚtres, alors que
les plans génériques ne se basent pas sur les valeurs des paramÚtres
et peuvent ĂȘtre rĂ©-utilisĂ©s au fil des exĂ©cutions. De ce fait,
l'utilisation d'un plan générique permet d'éviter de gùcher du temps
de planification mais si le plan idéal dépend fortement des valeurs de
paramĂštres, alors un plan gĂ©nĂ©rique pourrait ĂȘtre inefficace. Le choix
entre ces options est généralement fait automatiquement mais il peut
ĂȘtre forcĂ© avec le paramĂštre plan_cache_mode
. Les
valeurs autorisées sont auto
(valeur par défaut),
force_custom_plan
et
force_generic_plan
. Ce paramÚtre est considéré
quand un plan en cache va ĂȘtre exĂ©cutĂ©, et non pas quand il va ĂȘtre
préparé. Pour plus d'informations, voir PREPARE.