VACUUM |
Ordures |
---|---|
PostgreSQL |
Syntaxe
VACUUM [ ( { FULL | FREEZE | VERBOSE | ANALYZE | DISABLE_PAGE_SKIPPING } [, ...] ) ] [ table_name [ (column_name [, ...] ) ] ] |
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table_name ] |
VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table_name [ (column_name [, ...] ) ] ] |
Paramètres
Nom | Description |
---|---|
FULL | Ce paramètre permet de sélectionner le vide «complet», pouvant récupérer plus d'espace, mais prend beaucoup plus de temps et verrouille exclusivement la table. Cette méthode nécessite également de l'espace disque supplémentaire, car elle écrit une nouvelle copie de la table et ne libère pas l'ancienne copie tant que l'opération n'est pas terminée. Habituellement, cela ne doit être utilisé que lorsqu'une quantité importante d'espace doit être récupérée dans la table. |
FREEZE | Ce paramètre permet de sélectionner un «gel» agressif des tuples. Spécifier FREEZE équivaut à exécuter VACUUM avec les paramètres vacuum_freeze_min_age et vacuum_freeze_table_age définis sur zéro. Le gel agressif est toujours effectué lorsque la table est réécrite, cette option est donc redondante lorsque FULL est spécifié. |
VERBOSE | Ce paramètre permet d'afficher un rapport d'activité de vide détaillé pour chaque table. |
ANALYZE | Ce paramètre permet de mettre à jour les statistiques utilisées par le planificateur pour déterminer le moyen le plus efficace d'exécuter une requête. |
DISABLE_PAGE_SKIPPING | Ce paramètre permet de désactiver le saut de page. Normalement, VACUUM sautera des pages en fonction de la carte de visibilité. Les pages où tous les tuples sont connus pour être gelés peuvent toujours être ignorées, et celles où tous les tuples sont connus pour être visibles pour toutes les transactions peuvent être ignorées, sauf lors de l'exécution d'un vide agressif. De plus, sauf lors d'une aspiration agressive, certaines pages peuvent être sautées afin d'éviter d'attendre que d'autres sessions aient fini de les utiliser. Cette option désactive tous les comportements de saut de page et est destinée à être utilisée uniquement si le contenu de la carte de visibilité est suspecté, ce qui ne devrait se produire que s'il y a un problème matériel ou logiciel provoquant une corruption de la base de données. |
table_name | Ce paramètre permet d'indiquer le nom (éventuellement qualifié par le schéma) d'une table spécifique à vider. En cas d'omission, toutes les tables normales et vues matérialisées de la base de données actuelle sont aspirées. Si la table spécifiée est une table partitionnée, toutes ses partitions feuilles sont nettoyées. |
column_name | Ce paramètre permet d'indiquer le nom d'une colonne spécifique à analyser. Par défaut, toutes les colonnes. Si une liste de colonnes est spécifiée, ANALYZE est implicite. |
Description
Cette instruction permet de ramasser les ordures (données) et éventuellement analyser une base de données.
Remarques
- Lorsque VERBOSE est spécifié, VACUUM émet des messages de progression pour indiquer quelle table est en cours de traitement. Diverses statistiques sur les tables sont également affichées.
- Pour passer faire le ménage sur une table, il faut généralement être le propriétaire de la table ou un superutilisateur. Cependant, les propriétaires de bases de données sont autorisés à vider toutes les tables de leurs bases de données, à l'exception des catalogues partagés. (La restriction pour les catalogues partagés signifie qu'un véritable VACUUM à l'échelle de la base de données ne peut être effectué que par un superutilisateur.) VACUUM ignorera toutes les tables que l'utilisateur appelant n'a pas la permission de vider.
- L'instruction VACUUM ne peut pas être exécuté à l'intérieur d'un bloc de transaction.
- Pour les tables avec des index GIN, VACUUM (sous n'importe quelle forme) complète également toutes les insertions d'index en attente, en déplaçant les entrées d'index en attente vers les emplacements appropriés dans la structure d'index GIN principale.
- Il est recommandé que les bases de données de production actives soient nettoyées fréquemment (au moins la nuit), afin de supprimer les lignes mortes. Après avoir ajouté ou supprimé un grand nombre de lignes, il peut être judicieux d'émettre une commande VACUUM ANALYZE pour la table affectée. Cela mettra à jour les catalogues système avec les résultats de toutes les modifications récentes et permettra au planificateur de requêtes PostgreSQL de faire de meilleurs choix dans la planification des requêtes.
- L'option FULL n'est pas recommandée pour une utilisation de routine, mais peut être utile dans des cas particuliers. Par exemple, lorsque vous avez supprimé ou mis à jour la plupart des lignes d'une table et que vous souhaitez que la table se rétrécisse physiquement pour occuper moins d'espace disque et permettre des analyses de table plus rapides. Le VACUUM FULL réduira généralement la table plus qu'un simple VACUUM.
- Le VACUUM entraîne une augmentation substantielle du trafic d'entrée/sortie, ce qui peut entraîner de mauvaises performances pour d'autres sessions actives. Par conséquent, il est parfois conseillé d'utiliser la fonction de délai de vide basée sur les coûts.
- Le PostgreSQL comprend une fonction «autovacuum» pouvant automatiser la maintenance de routine du vide.
Dernière mise à jour : Jeudi, le 14 Octobre 2021