vacuum
) #Ces paramètres contrôlent le comportement du VACUUM. Pour plus d'informations sur le but et les responsabilités du VACUUM, voir Section 24.1.
Ces paramètres contrôlent le comportement de la fonctionnalité appelée autovacuum. Se référer à la Section 24.1.6 pour plus de détails. Notez que beaucoup de ces paramètres peuvent être surchargés au niveau de chaque table ; voir Paramètres de stockage.
autovacuum
(boolean
) #
Contrôle si le serveur doit démarrer le démon d'autovacuum.
Celui-ci est activé par défaut. track_counts
doit aussi être activé pour que ce
démon soit démarré. Ce paramètre ne peut être configuré que dans le fichier
postgresql.conf
ou indiqué sur la ligne de commande;
cependant, le processus d'autovacuum peut être désactivé au niveau
de chaque table en modifiant les paramètres de stockage de la table.
Même si ce paramètre est désactivé, le système lance les processus autovacuum nécessaires pour empêcher le bouclage des identifiants de transaction. Voir Section 24.1.5 pour plus d'informations.
autovacuum_worker_slots
(integer
)
#Indique le nombre de slots de processus serveur à réserver pour les processus autovacuum worker. Par défaut, il y a 16 slots mais cela pourrait être moins si la configuration du noyau ne l'accepte pas (comme déterminé lors de l'initdb). Ce paramètre peut seulement être configuré au démarrage du serveur.
Lors de la modification de cette valeur, pensez à ajuster autovacuum_max_workers.
autovacuum_max_workers
(integer
) #
Indique le nombre maximum de processus autovacuum (autre que le lanceur
d'autovacuum) qui peuvent être exécutés simultanément. La valeur par défaut
est 3
. Ce paramètre peut seulement être configuré dans
le fichier postgresql.conf
ou sur la ligne de commande
du serveur.
Notez qu'une valeur de ce paramètre plus haute que la valeur de autovacuum_worker_slots n'aura pas d'effet car les autovacuum workers sont pris dans l'ensemble de slots établis par ce paramètre.
autovacuum_naptime
(integer
) #
Indique le délai minimum entre les tours d'activité du démon autovacuum sur
une base. À chaque tour, le démon examine une base de données et lance les
commandes VACUUM
et ANALYZE
nécessaires aux tables de cette base. Si cette valeur est indiquée sans
unité, elle est comprise comme un nombre de secondes. Il vaut, par défaut,
une minute (1min
). Ce paramètre ne peut être configuré
que dans le fichier postgresql.conf
ou indiqué sur la
ligne de commande.
autovacuum_vacuum_threshold
(integer
) #
Indique le nombre minimum de lignes mises à jour ou supprimées
nécessaire pour déclencher un VACUUM
sur une table.
La valeur par défaut est de 50 lignes.
Ce paramètre ne peut être configuré que dans le fichier
postgresql.conf
ou indiqué sur la ligne de commande
mais il est possible de surcharger ce paramètre pour toute table en
modifiant les paramètres de stockage de la table.
autovacuum_vacuum_insert_threshold
(integer
)
#
Indique le nombre de lignes enregistrées avant de déclencher un
VACUUM
sur une table. La valeur par défaut est 1000
lignes. Si -1 est indiqué, autovacuum ne déclenchera pas d'opération
VACUUM
sur une table en se basant sur le nombre
d'insertions. Ce paramètre peut seulement être configuré dans le fichier
postgresql.conf
et sur la ligne de commande du
serveur ; mais la configuration peut être surchargée par des tables
individuelles en modifiant leur paramètres de stockage.
autovacuum_analyze_threshold
(integer
) #
Indique le nombre minimum de lignes insérées, mises à jour ou supprimées
nécessaire pour déclencher un ANALYZE
sur une table. La valeur
par défaut est de 50 lignes.
Ce paramètre ne peut être configuré que dans le fichier
postgresql.conf
ou indiqué sur la ligne de commande
mais il est possible de surcharger ce paramètre pour toute table en
modifiant les paramètres de stockage de la table.
autovacuum_vacuum_insert_scale_factor
(floating point
)
#
Indique une fraction des blocs non gelés dans la table à ajouter à
autovacuum_vacuum_insert_threshold
avant de décider de
déclencher un VACUUM
sur une table. La valeur par défaut
est 0,2
(soit 20% des pages non gelées de la table). Ce paramètre peut seulement être configuré
dans le fichier postgresql.conf
et sur la ligne de
commande du serveur ; mais la configuration peut être surchargée par
des tables individuelles en modifiant leur paramètres de stockage.
autovacuum_vacuum_scale_factor
(floating point
) #
Indique la fraction de taille de la table à ajouter à
autovacuum_vacuum_threshold
pour décider du moment
auquel déclencher un VACUUM
. La valeur par défaut
est 0,2
(20 % de la taille de la table).
Ce paramètre ne peut être configuré que dans le fichier
postgresql.conf
ou indiqué sur la ligne de commande
mais il est possible de surcharger ce paramètre pour toute table en
modifiant les paramètres de stockage de la table.
autovacuum_analyze_scale_factor
(floating point
) #
Indique la fraction de taille de la table à ajouter à
autovacuum_analyze_threshold
pour décider du
moment auquel déclencher une commande ANALYZE
.
La valeur par défaut est 0,1
(10 % de la taille de la table).
Ce paramètre ne peut être configuré que dans le fichier
postgresql.conf
ou indiqué sur la ligne de commande
mais il est possible de surcharger ce paramètre pour toute table en
modifiant les paramètres de stockage de la table.
autovacuum_vacuum_max_threshold
(integer
)
#
Spécifie le nombre maximum de lignes mises à jour ou supprimées
nécessaires pour déclencher un VACUUM
dans toute
table, donc une limite sur la valeur calculée avec
autovacuum_vacuum_threshold
et
autovacuum_vacuum_scale_factor
. La valeur par
défaut est de 100 millions de lignes. S'il vaut -1, autovacuum ne
forcera par un nombre maximum de lignes mises à jour ou supprimées qui
déclencheront une opération VACUUM
. Ce paramètre
peut seulement être configuré dans le fichier
postgresql.conf
ou sur la ligne de commande du
serveur ; le paramètre peut être surchargé pour les tables
individuelles en changeant leurs paramètres de stockage.
autovacuum_freeze_max_age
(integer
) #
Indique l'âge maximum (en transactions) que le champ
pg_class
.relfrozenxid
d'une table peut atteindre avant qu'une opération
VACUUM
ne soit forcée pour empêcher la réinitialisation
de l'ID de transaction sur cette table. Le système lance les
processus autovacuum pour éviter ce bouclage même si l'autovacuum est désactivé.
L'opération VACUUM supprime aussi les anciens fichiers du
sous-répertoire pg_xact
, ce qui explique pourquoi
la valeur par défaut est relativement basse (200 millions de transactions).
Ce paramètre
n'est lu qu'au démarrage du serveur, mais il peut être diminué pour
toute table en modifiant les paramètres de stockage de la table. Pour plus
d'informations, voir Section 24.1.5.
autovacuum_multixact_freeze_max_age
(integer
) #
Indique l'âge maximum (en multixacts) que le champ
pg_class
.relminmxid
d'une table peut atteindre avant qu'une opération
VACUUM
ne soit forcé pour empêcher une réutilisation
des identifiants multixact dans la table. Notez que le système lancera
les processus autovacuum pour empêcher la réutilisation même si
l'autovacuum est normalement désactivé.
Un VACUUM des multixacts s'occupe aussi de la suppression des anciens
fichiers à partir des sous-répertoires pg_multixact/members
et pg_multixact/offsets
, ce qui explique pourquoi
la valeur par défaut est relativement basse (400 million de multixacts).
Ce paramètre est seulement configurable au démarrage du serveur mais sa
valeur peut être réduite pour des tables individuelles en modifiant les
paramètres de stockage de la table. Pour plus d'informations, voir Section 24.1.5.1.
autovacuum_vacuum_cost_delay
(integer
) #
Indique la valeur du coût de délai utilisée dans les opérations de
VACUUM
. Si -1 est indiqué,
la valeur habituelle de vacuum_cost_delay est
utilisée. Si cette valeur est spécifiée sans unité, elle est comprise
comme un nombre de millisecondes. La valeur par défaut est 2 millisecondes.
Ce paramètre ne peut être configuré que dans le fichier
postgresql.conf
ou indiqué sur la ligne de commande
mais il est possible de le surcharger pour toute table en
modifiant les paramètres de stockage de la table.
autovacuum_vacuum_cost_limit
(integer
) #
Indique la valeur de coût limite utilisée dans les opérations de
VACUUM
automatiques. Si -1
est
indiqué (valeur par défaut), la valeur courante de
vacuum_cost_limit est utilisée. La
valeur est distribuée proportionnellement entre les processus
autovacuum en cours d'exécution, s'il y en a plus d'un, de sorte que la
somme des limites de chaque processus ne dépasse jamais la valeur de
cette variable.
Ce paramètre ne peut être configuré que dans le fichier
postgresql.conf
ou indiqué sur la ligne de commande
mais il est possible de le surcharger pour toute table en modifiant les
paramètres de stockage.
Lors de l'exécution des commandes VACUUM et ANALYZE, le système maintient un compteur interne qui
garde trace du coût estimé des différentes opérations d'entrées/sorties
disques réalisées. Quand le coût accumulé atteint une limite (configurée
par vacuum_cost_limit
), le processus réalisant
l'opération s'endort pour une courte période de temps, configurée par
vacuum_cost_delay
. Puis il réinitialise le compteur et
continue l'opération.
Le but de cette fonctionnalité est de permettre aux administrateurs de
réduire l'impact sur les entrées/sorties disques de ces commandes sur le
reste de l'activité de l'instance. Il est de nombreuses situations où il
n'est pas important que les commandes de maintenance comme
VACUUM
et ANALYZE
finissent
rapidement. Néanmoins, il est habituellement très important que ces
commandes n'interfèrent pas significativement avec les capacités du
serveur à réaliser d'autres opérations sur l'instance. La pause du VACUUM
basée sur les coûts de celui-ci fournit un moyen pour que les
administrateurs y parviennent.
Cette fonctionnalité est désactivée par défaut pour les commandes
manuelles de VACUUM
. Pour l'activer, configurez le
paramètre vacuum_cost_delay
à une valeur différente de
zéro.
vacuum_cost_delay
(floating point
)
#
La durée d'endormissement du processus une fois la limite de coût
atteinte. Si cette valeur est indiquée sans unité, elle est pris pour
des millisecondes. La valeur par défaut est 0
, ce
qui désactive la fonctionnalité. Les valeurs positives activent les
VACUUM basés sur le coût.
Si la fonctionnalité est activée, les valeurs adéquates pour
vacuum_cost_delay
sont habituellement basses,
peut-être même inférieures à la milliseconde. Bien que
vacuum_cost_delay
puisse être configuré à des
valeurs en dessous de la milliseconde, de tels délais peuvent ne pas
être mesurés précisément sur les anciennes plateformes. Dans ce cas,
augmenter la consommation des ressources du VACUUM
au dessus de ce qu'on va obtenir à 1 milliseconde demandera de
modifier les autres paramètres de coût. Néanmoins, vous pouvez
conserver vacuum_cost_delay
aussi bas que ce que
votre plateforme est capable de mesurer correctement ; de gros
délais ne sont pas utiles.
vacuum_cost_page_hit
(integer
)
#
Le coût estimé pour traiter un bloc trouvé dans le cache disque de
PostgreSQL. Plus exactement, c'est le coût pour verrouiller le cache,
rechercher dans la table de hachage et parcourir le contenu de ce bloc.
La valeur par défaut est 1
.
vacuum_cost_page_miss
(integer
)
#
Le coût estimé pour traiter un bloc lu sur disque. Plus exactement,
c'est le coût pour verrouiller le cache, rechercher dans la table de
hachage, lire le bloc sur disque et parcourir le contenu de ce bloc. La
valeur par défaut est 2
.
vacuum_cost_page_dirty
(integer
)
#
Le coût estimé pour modifier un bloc auparavant propre. Plus
exactement, c'est le coût de l'entrée/sortie disque supplémentaire
requise pour vider le bloc modifiée sur disque. La valeur par défaut
est 20
.
vacuum_cost_limit
(integer
)
#
C'est le coût accumulé qui forcera le processus à s'endormir pendant
vacuum_cost_delay
. La valeur par défaut est
200
.
Il existe quelques opérations qui détiennent des verrous critiques et
qui, de ce fait, doivent se terminer le plus rapidement possible. Les
délais sur le VACUUM ne surviennent pas lors de ce type d'opérations.
De ce fait, il est possible que le coût accumulé dépasse fortement la
limite configurée. Pour éviter de longs délais inutiles, le délai réel
est calculé ainsi :
vacuum_cost_delay
*
accumulated_balance
/
vacuum_cost_limit
avec un maximum de
vacuum_cost_delay
* 4.
vacuum_truncate
(boolean
)
#
Active ou désactive la suppression des blocs vides en fin de table. La
valeur par défaut est true
. Si
true
, VACUUM
et autovacuum
supprimeront les blocs vides en fin de table pour que l'espace disque
des blocs vidés soit rendu disponible au système d'exploitation. Notez
que cette suppression nécessite un verrou ACCESS
EXCLUSIVE
sur la table. Le paramètre
TRUNCATE
de VACUUM
, si précisé,
surcharge la valeur de ce paramètre. Cette configuration peut aussi
être surchargée suivant les paramètres de stockage individuels des
tables.
Pour maintenir la fiabilité y compris après un bouclage des identifiants
de transaction, PostgreSQL marque les lignes
qui sont suffisamment anciennes comme gelées. Ces
lignes sont visibles à tout le monde ; les autres transactions n'ont
pas besoin d'examiner leur identifiants de transaction d'insertion pour
déterminer la visibilité. VACUUM
est responsable du
gel des lignes. Les paramètres suivants contrôlent le comportement de
gel du VACUUM
et doivent être configurés basés sur le
taux de consommation des identifiants de transaction du système et les
types d'accès aux données de la charge de travail dominante. Voir
Section 24.1.5 pour plus d'informations sur le
bouclage des identifiants de transactions et sur la configuration de ces
paramètres.
vacuum_freeze_table_age
(integer
) #
VACUUM
effectuera un parcours agressif de la table
si le champ
pg_class
.relfrozenxid
de la table a atteint l'âge spécifié par ce paramètre. Un parcours
agressif diffère d'un VACUUM
standard dans le sens
où il visite chaque bloc qui pourrait contenir des XID ou MXID non
gelés, pas seulement ceux qui pourraient contenir des lignes mortes. La
valeur par défaut est 150 millions de transactions. Même si les
utilisateurs peuvent positionner cette valeur à n'importe quelle valeur
comprise entre zéro et 2 milliards, VACUUM
limitera
silencieusement la valeur effective à 95% de autovacuum_freeze_max_age, afin qu'un vacuum périodique
manuel ait une chance de s'exécuter avant un autovacuum anti-bouclage
ne soit lancé pour la table. Pour plus d'informations voir Section 24.1.5.
vacuum_freeze_min_age
(integer
)
#
Précise l'âge limite (en transactions) que VACUUM
doit utiliser pour décider le déclenchement du gel des blocs qui ont un
identifiant de transaction plus ancien. La valeur par défaut est de 50
million transactions. Bien que les utilisateurs peuvent configurer
cette valeur de 0 à un milliard, VACUUM
limitera
silencieusement la valeur réelle à la moitié de la valeur de autovacuum_freeze_max_age, pour qu'il n'y ait pas un
temps trop court entre des autovacuums forcés. Pour plus
d'informations, voir Section 24.1.5.
vacuum_failsafe_age
(integer
)
#
Indique l'âge maximum (en transactions) que le champ
pg_class
.relfrozenxid
d'une table peut atteindre avant que VACUUM
ne
prenne de mesures extraordinaires pour éviter un échec du bouclage des
identifiants de transaction. C'est la stratégie de dernier ressort du
VACUUM
. Ce paramètre se déclenche typiquement quand
un autovacuum pour éviter que le bouclage des identifiants de
transaction a déjà été déclenché depuis quelques temps, bien qu'il soit
possible que ce paramètre se déclenche pendant tout type de
VACUUM
.
Quand il est déclenché, tout délai basé sur le coût ne sera pas
appliqué, les tâches de maintenance non essentielles (tels que le
nettoyage d'index) sont ignorés, et toute stratégie d'accès aux blocs
(Buffer Access
Strategy) en cours d'utilisation sera désactivée laissant
VACUUM
libre d'utiliser tout le cache disque de
PostgreSQL.
La valeur par défaut est de 1,6 milliards de transactions. Bien que les
utilisateurs peuvent configurer cette valeur de zéro à 2,1 milliards,
VACUUM
ajustera silencieusement la valeur réelle à
au moins 105 % de autovacuum_freeze_max_age.
vacuum_multixact_freeze_table_age
(integer
)
#
VACUUM
réalise un parcours agressif si le champ
pg_class
.relminmxid
de la table a atteint l'âge indiqué par ce paramètre. Un parcours
agressif diffère d'un VACUUM
standard dans le fait
qu'il visite chaque bloc qui pourrait contenir des identifiants de
transactions XID ou MXID non gelés, pas uniquement celles qui
pourraient contenir des lignes mortes. La valeur par défaut est de 150
MultiXact. Bien que les utilisateurs peuvent configurer cette valeur de
zéro à deux milliards, VACUUM
limitera
silencieusement la valeur réelle à 95 % de autovacuum_multixact_freeze_max_age, pour qu'un
VACUUM
manuel périodique ait une chance de
s'exécuter avant qu'un bouclage ne soit lancé pour la table. Pour plus
d'informations, voir Section 24.1.5.1.
vacuum_multixact_freeze_min_age
(integer
)
#
Indique l'âge limite (en multixacts) que VACUUM
doit
utiliser pour décider s'il doit déclencher le gel des blocs ayant un
identifiant multixact plus ancien. La valeur par défaut est de 5
millions de multixacts. Bien que les utilisateurs peuvent configurer
cette valeur de zéro à un milliard, VACUUM
limitera
silencieusement la valeur réelle à la moitié de la valeur de autovacuum_multixact_freeze_max_age, pour qu'il n'y ait
pas un temps trop court entre deux autovacuums forcés. Pour plus
d'informations, voir Section 24.1.5.1.
vacuum_multixact_failsafe_age
(integer
)
#
Indique l'âge maximum (en multixacts) que le champ
pg_class
.relminmxid
d'une table peut atteindre avant que VACUUM
ne
prenne de mesure extraordinaires pour éviter un échec du bouclage des
identifiants MultiXact globaux. C'est une mesure de dernier ressort
pour le VACUUM
. Cette mesure se déclenche typiquement
quand un autovacuum pour éviter une bascule des identifiants de
transaction a déjà été exécuté il y a quelques temps, bien qu'il soit
possible qu'elle se déclenche lors de tout type de
VACUUM
.
Quand cette méthode est déclenchée, tout délai basé sur le coût ne sera plus appliqué, et toute tâche de maintenance non essentielle (comme le nettoyage des index) est ignorée.
La valeur par défaut est de 1,6 milliards de MultiXact. Bien que les
utilisateurs peuvent configurer cette valeur de zéro à 2,1 milliards,
VACUUM
ajustera silencieusement la valeur réelle
à au moins 105 % de autovacuum_multixact_freeze_max_age.
vacuum_max_eager_freeze_failure_rate
(floating point
)
#
Indique le nombre maximum de blocs (sous la forme d'une fraction du
nombre de blocs total de la relation) que VACUUM
peut parcourir et échouer à configurer le drapeau
tout-gelé dans la carte de visibilité avant de désactiver le parcours
en avance. Une valeur de 0
le désactive complètement.
La valeur par défaut est de 0.03
(3 %).
Notez que, quand le parcours en avance est activé, seuls les échecs de gel compte, pas les gels réussis. Les gels de bloc réussis sont bloqués en interne à 20 % des blocs tout-visible, mais pas tout-gelé, de la relation. Limiter les gels réussis de blocs aide à amortir la surcharge entre plusieurs VACUUM normaux et limite l'inconvénient potentiel des gels en avant perdus de blocs qui sont modifiés de nouveau avant le prochain VACUUM agressif.
Ce paramètre peut seulement être configuré dans le fichier
postgresql.conf
ou sur la ligne de commande du
serveur ; mais ce paramètre peut être surchargé par une
configuration table par table en modifiant le paramètre de stockage
???.
Pour plus d'informations sur la configuration fine du comportement du
gel de ligne par le VACUUM, voir Section 24.1.5.