ANALYZE
ANALYZE — Collecter les statistiques d'une base de données
Synopsis
ANALYZE [ VERBOSE ] [ table [ (colonne [, ...] ) ] ]
Description
ANALYZE
collecte des
statistiques sur le contenu des tables de la base de données et
stocke les résultats dans la table système pg_statistic. L'optimiseur de requêtes les utilise
pour déterminer les plans d'exécution les plus efficaces.
Sans paramètre,
ANALYZE
examine chaque table de
la base de données courante. Avec un paramètre,
ANALYZE
examine seulement la
table concernée. Il est possible de donner une liste de noms de
colonnes, auquel cas seules les statistiques concernant ces
colonnes sont collectées.
Paramètres
-
VERBOSE
-
L'affichage de messages de progression est activé.
-
table
-
Le nom (éventuellement qualifié du nom du schéma) de la table
à analyser. Par défaut, toutes les tables de la base de
données courante sont analysées.
-
column
-
Le nom d'une colonne à analyser. Par défaut, toutes les
colonnes le sont.
Sorties
Quand VERBOSE est spécifié,
ANALYZE
affiche des messages de
progression pour indiquer la table en cours de traitement. Diverses
statistiques sur les tables sont aussi affichées.
Notes
Il est intéressant de lancer
ANALYZE
périodiquement ou juste
après avoir effectué de grosses modifications sur le contenu d'une
table. Des statistiques à jour aident l'optimiseur à choisir le
plan de requête le plus approprié et améliorent ainsi la vitesse du
traitement des requêtes. Une stratégie habituelle consiste à lancer
VACUUM et
ANALYZE
une fois par
jour, au moment où le serveur est le moins sollicité.
Contrairement à
VACUUM
FULL
,
ANALYZE
ne requiert qu'un verrou
en lecture sur la table cible. Il peut donc être lancé en parallèle
à d'autres activités sur la table.
Les statistiques récupérées par
ANALYZE
incluent habituellement
une liste des quelques valeurs les plus communes dans chaque
colonne et un histogramme affichant une distribution approximative
des données dans chaque colonne. L'un ou les deux peuvent être omis
si
ANALYZE
les juge
inintéressants (par exemple, dans une colonne à clé unique, il n'y
a pas de valeurs communes) ou si le type de données de la colonne
ne supporte pas les opérateurs appropriés. Il y a plus
d'informations sur les statistiques dans le Chapitre 22,
Planifier les tâches de maintenance.
Pour les grosses tables,
ANALYZE
prend aléatoirement
plusieurs lignes de la table, au hasard, plutôt que d'examiner
chaque ligne. Ceci permet à des tables très larges d'être examinées
rapidement. Néanmoins, les statistiques ne sont qu'approximatives
et changent légèrement à chaque fois qu'
ANALYZE
est lancé, même si le
contenu réel de la table n'a pas changé. Cela peut résulter en de
petites modifications dans les coûts estimés par l'optimiseur
affichés par
EXPLAIN
.
Dans de rares situations, ce non-déterminisme entraîne le choix par
l'optimiseur d'un plan de requête différent entre deux lancements
d'
ANALYZE
. Afin
d'éviter cela, le nombre de statistiques récupérées par
ANALYZE
peut être
augmenté, comme cela est décrit ci-dessous.
L'étendue de l'analyse est contrôlée par l'ajustement de la
variable de configuration default_statistics_target
ou colonne par colonne en initialisant la cible des statistiques
par colonne avec
ALTER TABLE ...
ALTER COLUMN ... SET STATISTICS
(voir ALTER
TABLE). Cette valeur cible initialise le nombre maximum
d'entrées dans la liste des valeurs les plus communes et le nombre
maximum de points dans l'histogramme. La valeur cible par défaut
est fixée à 10 mais elle peut être ajustée vers le haut ou vers le
bas afin d'obtenir un bon compromis entre la précision des
estimations de l'optimiseur, le temps pris par
ANALYZE
et l'espace total occupé
dans pg_statistic. En particulier,
initialiser la cible des statistiques à zéro désactive la collecte
de statistiques pour cette colonne. Cela peut s'avérer utile pour
les colonnes qui ne sont jamais utilisées dans les clauses
WHERE, GROUP BY
ou ORDER BY des requêtes puisque
l'optimiseur ne fait aucune utilisation des statistiques de ces
colonnes.
La plus grande cible de statistiques parmi les colonnes en cours
d'analyse détermine le nombre de lignes testées pour préparer les
statistiques de la table. Augmenter cette cible implique une
augmentation proportionnelle du temps et de l'espace nécessaires à
l'exécution d'
ANALYZE
.
Compatibilité
Il n'existe pas d'instruction
ANALYZE
dans le standard SQL.