ANALYZE

Nom

ANALYZE -- récupère des statistiques sur 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 dans la base de données en cours. Avec un paramètre, ANALYZE examine seulement cette table. Il est possible de donner une liste des noms de colonnes, auquel cas seules les statistiques concernant ces colonnes sont collectées.

Paramètres

VERBOSE

Active l'affichage de messages de progression.

table

Le nom (éventuellement précédé du nom du schéma) d'une table spécifique à analyser. Par défaut, il s'agit de toutes les tables dans la base de données en cours.

column

Le nom d'une colonne spécifique à analyser. Par défaut, toutes les colonnes.

Sorties

Quand VERBOSE est spécifié, ANALYZE émet des messages de progression pour indiquer quelle table est en cours de traitement. Sont aussi affichées différentes statistiques sur les tables.

Notes

Lancer périodiquement ANALYZE est une bonne idée, tout comme le lancer après de grosses modifications sur le contenu d'une table. Des statistiques à jour aideront l'optimiseur à choisir le plan de requête le plus approprié et amélioreront du coup la rapidité du traitement des requêtes. Une stratégie habituelle est de lancer VACUUM et ANALYZE une fois par jour au moment où le serveur est le moins sollicité.

Contrairement à VACUUM FULL, ANALYZE requiert seulement un verrou en lecture sur la table cible, donc il peut ê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 l'autre pourraient être omis si ANALYZE les trouve 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 21.

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 dans une petite période de temps. Notez, néanmoins, que les statistiques sont seulement approximatives et qu'elles changeront légèrement à chaque fois qu'ANALYZE est lancé, même si le contenu réel de la table n'a pas changé. Ceci pourrait résulter en de petites modifications dans les coûts estimés de l'optimiseur affichés par EXPLAIN. Dans de rare situations, ce non-déterminisme causera le choix d'un plan de requête différent par l'optimiseur entre deux lancements d'ANALYZE. Pour éviter ceci, augmentez le nombre de statistiques récupérées par ANALYZE, comme décrit ci-dessous.

L'étendue des analyses est contrôlable globalement en ajustant 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 de 10 mais ceci peut être ajusté en prenant compte 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 récupération de statistiques pour cette colonne. Il pourrait être utile de le faire pour les colonnes qui ne sont jamais utilisées dans les clauses WHERE, GROUP BY ou ORDER BY de requêtes car l'optimiseur n'utilisera pas les statistiques pour ces colonnes.

La plus grande cible de statistiques de toutes 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 cause une augmentation proportionnelle du temps et de l'espace nécessaires à exécuter ANALYZE.

Compatibilité

Il n'existe pas d'instruction ANALYZE dans le standard SQL.