0Pricing
SQL Academy · Leçon

ANALYZE et pg_statistic

Maintenez à jour les statistiques du planificateur avec ANALYZE, inspectez pg_statistic et utilisez les statistiques étendues pour les colonnes corrélées.

ANALYZE et pg_statistic est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Pourquoi ANALYZE ?

Le planificateur de requêtes doit estimer le nombre de lignes et les sélectivités pour choisir un plan efficace. Ces estimations proviennent de statistiques par colonne recueillies par ANALYZE.

Quand exécuter ANALYZE

Le nettoyage automatique exécute ANALYZE automatiquement en fonction de seuils de modification du nombre de lignes. Après des chargements en masse ou de grandes opérations DELETE, exécutez-le manuellement afin d'éviter la dégradation des plans :

ANALYZE orders;
ANALYZE (VERBOSE) orders;

Échantillonnage

ANALYZE échantillonne quelques centaines de lignes par colonne. Ajustez la cible de statistiques si les valeurs par défaut produisent de mauvaises estimations :

ALTER TABLE orders ALTER COLUMN customer_id SET STATISTICS 1000;
-- Up from default 100. ANALYZE will sample more rows.

pg_statistic

Le catalogue système où sont stockées les statistiques (utilisez la vue pg_stats pour une lecture plus claire) :

SELECT attname, n_distinct, most_common_vals, most_common_freqs, histogram_bounds
FROM pg_stats
WHERE schemaname = 'public' AND tablename = 'orders';

Ce que le planificateur examine

  • n_distinct — nombre de valeurs distinctes
  • most_common_vals — valeurs les plus fréquentes et leurs fréquences
  • histogram_bounds — intervalles pour les requêtes par plage
  • correlation — ordre physique par rapport à l'ordre logique (influence le coût du parcours)

Statistiques étendues

Les statistiques par colonne ne tiennent pas compte des corrélations entre colonnes. CREATE STATISTICS les capture :

CREATE STATISTICS orders_country_status (dependencies)
  ON country, status FROM orders;
ANALYZE orders;

-- Now the planner knows that  country='US' AND status='paid' is correlated
-- (e.g. most US orders happen to be 'paid').

Types de statistiques multivariées

  • dependencies — dépendances fonctionnelles (une colonne permet de prédire une autre)
  • ndistinct — combinaisons de valeurs distinctes
  • mcv — combinaisons de valeurs les plus fréquentes (PG 12 et versions ultérieures)

Mauvaises estimations → mauvais plans

La raison la plus fréquente d'une requête lente est une mauvaise estimation du nombre de lignes. Le planificateur choisit une boucle imbriquée parce qu'il s'attend à trouver 1 ligne, alors qu'il y en a en réalité 1 000 000.

EXPLAIN ANALYZE SELECT * FROM ... ;
-- Look at Plan rows vs actual rows. Big gap = run ANALYZE or add extended stats.

Imposer ANALYZE dans les migrations

Après un important chargement en masse :

COPY users FROM ... ;
ANALYZE users;
-- Without ANALYZE, the planner has no idea the table just grew.

Les statistiques ne se mettent pas automatiquement à jour en cas de changement de distribution

Si les données d'aujourd'hui sont très différentes de celles d'hier, les statistiques peuvent rester obsolètes jusqu'au déclenchement de l'analyse automatique. Exécutez ANALYZE manuellement après une modification de la structure des données.

pg_class.reltuples

Le planificateur utilise également une estimation du nombre de lignes provenant de pg_class. Cette estimation est mise à jour par VACUUM et ANALYZE. Vérification rapide :

SELECT relname, reltuples FROM pg_class WHERE relname = 'orders';

Récapitulatif

ANALYZE alimente le planificateur.

  • Exécutez-le après d'importantes modifications des données
  • Augmentez la cible STATISTICS pour les colonnes dont la distribution est très déséquilibrée
  • Utilisez CREATE STATISTICS pour les corrélations entre colonnes
  • Un grand écart entre l'estimation et la réalité est la première chose à corriger

Vérification rapide

EXPLAIN ANALYZE affiche une estimation de 1 ligne, mais 500 000 lignes réelles pour un WHERE sur une seule colonne. Quelle est la première correction à appliquer ?

Questions Fréquemment Posées

La leçon « ANALYZE et pg_statistic » est-elle gratuite ?

Oui — le texte complet de « ANALYZE et pg_statistic » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « ANALYZE et pg_statistic » ?

Maintenez à jour les statistiques du planificateur avec ANALYZE, inspectez pg_statistic et utilisez les statistiques étendues pour les colonnes corrélées. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « ANALYZE et pg_statistic » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. MVCC et causes du gonflement
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE et pg_statistic
  4. Parcours d’index uniquement et carte de visibilité
← Retour à SQL Academy