PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 14.19 » Administration du serveur » Configuration du serveur » Planification des requĂȘtes

20.7. Planification des requĂȘtes

20.7.1. Configuration de la mĂ©thode du planificateur

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).

20.7.2. Constantes de coĂ»t du planificateur

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.

Note

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.

Astuce

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.

20.7.3. Optimiseur gĂ©nĂ©tique de requĂȘtes

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.

20.7.4. Autres options du planificateur

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 JOINtures 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.