vacuumdb — récupère l'espace inutilisé et, optionnellement, analyse une base de données PostgreSQL
vacuumdb
[option-connexion
...] [option
...]
[
-t
| --table
table
[( colonne
[,...] )]
]
... [
nom_base
| -a
| --all
]
vacuumdb
[option-connexion
...] [option
...]
[
-n
| --schema
schema
]
... [
nom_base
| -a
| --all
]
vacuumdb
[option-connexion
...] [option
...]
[
-N
| --exclude-schema
schema
]
... [
nom_base
| -a
| --all
]
vacuumdb est un outil de nettoyage d'une base de données. vacuumdb peut également engendrer des statistiques internes utilisées par l'optimiseur de requêtes de PostgreSQL.
vacuumdb est une surcouche de la commande
VACUUM
. Il n'y a pas
de différence réelle entre exécuter
des VACUUM et des ANALYZE sur les bases de données via cet outil et via
d'autres méthodes pour accéder au serveur.
vacuumdb accepte les arguments suivants sur la ligne de commande :
-a
--all
Nettoie toutes les bases de données.
--buffer-usage-limit size
Indique la taille du buffer associé au VACUUM dans le cadre du Buffer Access Strategy pour une évocation donnée de vacuumdb. Cette taille est utilisée pour calculer le nombre de blocs dans le cache disque de PostgreSQL qui seront réutilisés dans le cadre de cette stratégie. Voir VACUUM.
[-d] nom_base
[--dbname=]nom_base
Spécifie le nom de la base à nettoyer ou à analyser quand l'option
-a
/--all
n'est pas utilisée. Si le
nom de la base n'est pas fourni, il est lu à partir de la variable
d'environnement PGDATABASE
. Si elle n'est pas
configurée, le nom de l'utilisateur pour la connexion est utilisé. Ce
nom de base peut être remplacé par une chaîne de connexion. Dans ce cas, les
paramètres de la chaîne de connexion surchargeront toutes les options
en ligne de commande conflictuelles.
--disable-page-skipping
Désactive l'utilisation de la Visibility Map permettant d'ignorer certains blocs.
-e
--echo
Affiche les commandes que vacuumdb engendre et envoie au serveur.
-f
--full
Exécute un nettoyage « complet ».
-F
--freeze
« Gèle » agressivement les lignes.
--force-index-cleanup
Supprime toujours les entrées d'index pointant vers des lignes mortes.
-j njobs
--jobs=njobs
Exécute les commandes VACUUM et/ou ANALYZE en parallèle en plaçant
njobs
commandes
simultanément. Cette option réduit la durée du traitement tout en
augmentant la charge sur le serveur de bases de données.
vacuumdb ouvrira njobs
connexions sur la base de
données, donc assurez-vous que votre configuration du paramètre max_connections est suffisamment élevée pour accepter
toutes les connexions nécessaires.
Notez que l'utilisation de ce mode avec l'option -f
(FULL
) pourrait causer des échecs de type deadlock
si certains catalogues systèmes sont traités en parallèle.
--min-mxid-age age_mxid
Exécute les commandes VACUUM et ANALYZE sur les tables dont l'âge de
l'identifiant multixact est d'au moins age_mxid
. Cette option est utile pour
prioriser les tables à traiter pour prévenir un bouclage des
identifiants multixact (voir la Section 24.1.5.1).
Aux fins de cette option, l'âge de l'identifiant multixact d'une relation est le plus grand âge de la relation principale et de la relation TOAST associée si cette dernière existe. Comme les commandes exécutées par vacuumdb traitera aussi la table TOAST de la relation si nécessaire, il n'est pas nécessaire de la considérer séparément.
Cette option est seulement utile pour les serveurs exécutant PostgreSQL 9.6 et ultérieurs.
--min-xid-age age_xid
Exécute les commandes VACUUM et ANALYZE sur les tables dont l'âge de
l'identifiant de transaction est d'au moins age_xid
. Cette option est utile pour
prioriser les tables à traiter pour prévenir un bouclage des
identifiants de transaction (voir la Section 24.1.5.1).
Aux fins de cette option, l'âge de l'identifiant de transaction d'une relation est le plus grand âge de la relation principale et de la relation TOAST associée si cette dernière existe. Comme les commandes exécutées par vacuumdb traitera aussi la table TOAST de la relation si nécessaire, il n'est pas nécessaire de la considérer séparément.
-n schema
--schema=schema
Nettoie ou analyse uniquement les tables du schéma
schema
. Plusieurs schémas
peuvent être traités en même temps en écrivant plusieurs fois l'option
-n
.
-N schema
--exclude-schema=schema
Nettoie ou analyse toutes les tables sauf celles du schéma
schema
. Plusieurs schémas
peuvent être ignorés en même temps en écrivant plusieurs fois l'option
-N
.
--no-index-cleanup
Ne supprime pas les entrées d'index pointaint vers des lignes mortes.
--no-process-main
Ignore la relation principale.
--no-process-toast
Ignore la table TOAST associée à la table en cours de traitement, s'il y en a une.
--no-truncate
Ne tronque pas les pages vides en fin de table.
-P workers_parallelisation
--parallel=workers_parallelisation
Indique le nombre de workers de parallélisation pour un vacuum parallélisé. Ceci permet au vacuum d'utiliser plusieurs CPU pour traiter les index. Voir VACUUM.
-q
--quiet
N'affiche pas de message de progression.
--skip-locked
Ignore les relations qui ne peuvent pas immédiatement être verrouillées pour être traitées.
-t table
[ (colonne
[,...]) ]
--table=table
[ (colonne
[,...]) ]
Ne nettoie ou n'analyse que la table table
. Des noms de colonnes peuvent
être précisés en conjonction avec les options
--analyze
ou --analyze-only
.
Plusieurs tables peuvent être traitées par VACUUM en utilisant
plusieurs fois l'option -t
.
Lorsque des colonnes sont indiquées, il peut être nécessaire d'échapper les parenthèses. (Voir les exemples plus bas.)
-v
--verbose
Affiche des informations détaillées durant le traitement.
-V
--version
Affiche la version de vacuumdb, puis quitte.
-z
--analyze
Calcule aussi les statistiques utilisées par le planificateur.
-Z
--analyze-only
Calcule seulement les statistiques utilisées par le planificateur (donc pas de VACUUM).
--analyze-in-stages
Calcule seulement les statistiques utilisées par le planificateur (donc
pas de VACUUM), comme --analyze-only
. Lance les trois
phases d'analyse. La première phase utilise la cible de statistiques la
plus basse possible (voir default_statistics_target) pour produire des statistiques
utilisables le plus rapidement, et les phases suivantes construisent les
statistiques complètes.
Cette option est seulement utile pour analyser une base qui n'a
actuellement pas de statistiques ou a des statistiques complètement
faussées, comme c'est le cas d'une base toute nouvelle, restaurée à
partir d'une sauvegarde ou par pg_upgrade
. Soyez
conscient qu'utiliser ces option dans une base ayant des statistiques
existantes peut faire que les choix de l'optimiseur de statistiques
deviennent temporairement pires à cause des cibles basses sur les
statistiques pour la première phase.
-?
--help
Affiche l'aide sur les arguments en ligne de commande de vacuumdb, puis quitte.
vacuumdb accepte aussi les arguments suivants comme paramètres de connexion :
-h hôte
--host=hôte
Indique le nom d'hôte de la machine qui héberge le serveur de bases de données. Si la valeur commence par une barre oblique (/), elle est utilisée comme répertoire pour la socket de domaine Unix.
-p port
--port=port
Indique le port TCP ou le fichier local de socket de domaine Unix sur lequel le serveur attend les connexions.
-U utilisateur
--username=utilisateur
Nom d'utilisateur pour la connexion.
-w
--no-password
Ne demande jamais un mot de passe. Si le serveur en réclame un pour
l'authentification et qu'un mot de passe n'est pas disponible d'une
autre façon (par exemple avec le fichier .pgpass
),
la tentative de connexion échouera. Cette option peut être utile pour
les scripts où aucun utilisateur n'est présent pour saisir un mot de
passe.
-W
--password
Force vacuumdb à demander un mot de passe avant la connexion à une base de données.
Cette option n'est jamais obligatoire car
vacuumdb demandera automatiquement un mot de
passe si le serveur exige une authentification par mot de passe.
Néanmoins, vacuumdb perdra une tentative de
connexion pour trouver que le serveur veut un mot de passe. Dans
certains cas, il est préférable d'ajouter l'option -W
pour éviter la tentative de connexion.
--maintenance-db=nom_base_maintenance
Indique le nom de la base où se connecter pour récupérer la liste des
bases pour lesquelles il faut exécuter un nettoyage via VACUUM. Cette
option est intéressante quand l'option
-a
/--all
est utilisée. Si cette
option n'est pas ajoutée, la base postgres
sera
utilisée. Si cette base n'existe pas, la base
template1
sera utilisée. Le nom de la base peut être
remplacé par une chaîne de
connexion. Dans ce cas, les paramètres de la chaîne de connexion
surchargeront les options en ligne de commande conflictuelles. De plus,
les paramètres de la chaîne de connexion autres que le nom de la base
lui-même seront réutilisés lors de la connexion aux autres bases.
PGDATABASE
PGHOST
PGPORT
PGUSER
Paramètres de connexion par défaut.
PG_COLOR
Indique s'il faut utiliser des couleurs dans les messages de diagnostic.
Les valeurs possibles sont always
,
auto
, never
.
Cet outil, comme la plupart des autres outils PostgreSQL, utilise aussi les variables d'environnement supportées par la bibliothèque libpq (voir Section 32.15).
En cas de difficultés, il peut être utile de consulter VACUUM et psql, sections présentant les problèmes éventuels et les messages d'erreur.
Le serveur de base de données doit fonctionner sur le serveur cible. Les paramètres de connexion éventuels et les variables d'environnement utilisés par la bibliothèque cliente libpq s'appliquent.
Pour nettoyer la base de données test
:
$
vacuumdb test
Pour nettoyer et analyser une base de données nommée
grossebase
:
$
vacuumdb --analyze grossebase
Pour nettoyer la seule table foo
dans une base de
données nommée xyzzy
et analyser la seule colonne
bar
de la table :
$
vacuumdb --analyze --verbose --table='foo(bar)' xyzzy
Pour nettoyer toutes les tables des schémas foo
et
bar
dans une base de données nommée
xyzzy
:
$
vacuumdb --schema='foo' --schema='bar' xyzzy