vacuumdb — récupère l'espace inutilisé et, optionnellement, analyse une base de données PostgreSQL
vacuumdb
[option_de_connexion
...] [option
...]
[
-t
| --table
table
[( colonne
[,...] )]
]
... [nom_base
]
vacuumdb
[options_de_connexion
...] [option
...] -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.
[-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.
Cette option est seulement disponible pour les serveurs exécutant PostgreSQL 9.6 et ultérieurs.
-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.
-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.
Cette option est seulement utile pour les serveurs exécutant PostgreSQL 9.6 et ultérieurs.
-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.
Cette option est seulement disponible pour les serveurs PostgreSQL version 13 et supérieures.
-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.
Cette option est seulement utile pour les serveurs exécutant PostgreSQL 12 et ultérieurs.
-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
. Effectue
plusieurs (pour le moment trois) étapes de calcul avec différents
réglages de configuration afin de générer des statistiques utilisables
plus rapidement.
Cette option est utile pour calculer les statistiques d'une base qui
vient d'être peuplée, que cela soit à partir d'une restauration de
sauvegarde ou d'un pg_upgrade
. Cette option tentera
de créer quelques statistiques le plus rapidement possible, pour rendre
la base de données utilisable, et ensuite produire les statistiques
complètes durant les étapes suivantes.
-?
--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 33.14).
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.
vacuumdb peut avoir besoin de se connecter
plusieurs fois au serveur PostgreSQL. Afin
d'éviter de saisir le mot de passe à chaque fois, on peut utiliser un
fichier ~/.pgpass
. Voir Section 33.15
pour plus d'informations.
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