0Pricing
SQL Academy · Leçon

VACUUM, autovacuum, vacuum_cost_delay

Ajustez les seuils d’autovacuum, vacuum_cost_delay et le VACUUM parallèle pour les grandes tables.

VACUUM, autovacuum, vacuum_cost_delay est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.

Trois modes de VACUUM

  • VACUUM (paresseux) — récupère l'espace des lignes mortes, met à jour la carte de l'espace libre, sans verrou exclusif
  • VACUUM FULL — réécrit la table ; verrou exclusif ; restitue l'espace disque à l'OS
  • VACUUM ANALYZE — exécute VACUUM et actualise les statistiques du planificateur en une seule opération

Exécuter VACUUM manuellement

Parfois utile même avec le nettoyage automatique :

VACUUM (VERBOSE) orders;
VACUUM (VERBOSE, ANALYZE) orders;
VACUUM (PARALLEL 4) orders;       -- parallel index cleanup (PG 13+)

Processus de nettoyage automatique

Un lanceur en arrière-plan démarre des processus de travail qui exécutent VACUUM sur les tables dépassant certains seuils. Par défaut, quelques processus de travail gèrent le cluster.

Paramétrage par table

Les tables très sollicitées bénéficient d'un nettoyage automatique agressif :

ALTER TABLE busy_table SET (
  autovacuum_vacuum_scale_factor = 0.05,    -- 5% dead vs default 20%
  autovacuum_vacuum_threshold    = 1000,
  autovacuum_analyze_scale_factor = 0.05
);

vacuum_cost_delay

Limite les entrées-sorties de VACUUM afin de ne pas ralentir les requêtes au premier plan. La valeur par défaut de PG 12 et des versions ultérieures est de 2 ms — elle convient généralement. Pour les SSD, vous pouvez la réduire :

autovacuum_vacuum_cost_delay = 2ms
-- Lower delay = faster vacuum, more I/O usage.
-- Set per-table for hot tables that need faster cleanup.

VACUUM parallèle

Depuis PG 13, VACUUM parallélise le nettoyage des index :

VACUUM (PARALLEL 4) big_table;
-- Each index cleaned by a parallel worker (up to max_parallel_maintenance_workers).

VACUUM FULL : quand et pourquoi

Réécrit entièrement la table — restitue l'espace à l'OS. Acquiert ACCESS EXCLUSIVE. Utilisez-le uniquement en dernier recours, ou utilisez plutôt pg_repack.

VACUUM FULL orders;
-- Locks orders; rewrites; on huge tables this is hours of downtime.

pg_repack : une alternative en ligne

Réécrit une table en ligne — sans verrouillage complet. Produit le même effet que VACUUM FULL, tout en étant adapté à la production :

pg_repack -d mydb -t orders
-- Builds a shadow table, sync, swaps in.

Surveiller le nettoyage automatique

Consultez les heures des dernières exécutions de VACUUM et d'ANALYZE ainsi que le nombre de lignes mortes :

SELECT relname,
       n_live_tup, n_dead_tup,
       last_autovacuum, last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;

Quand le nettoyage automatique prend du retard

Symptômes :

  • Le gonflement augmente
  • n_dead_tup est élevé dans pg_stat_user_tables
  • Les plans d'exécution des requêtes se dégradent

Correctifs : augmentez autovacuum_max_workers, réduisez le facteur d'échelle par table, corrigez les transactions longues qui bloquent VACUUM.

Journalisation de VACUUM

Pour le paramétrage, consignez les opérations VACUUM lentes :

log_autovacuum_min_duration = '500ms'
-- Logs every autovacuum action that took longer than 500ms.

FREEZE

VACUUM « gèle » parfois les anciens tuples afin d'empêcher le retour à zéro de xid. Un nettoyage automatique agressif maintient les âges de gel à un niveau bas et évite les situations d'urgence liées au retour à zéro.

Récapitulatif

Le nettoyage automatique est essentiel ; adaptez-le à la charge de travail.

  • Paramètres de nettoyage automatique par table pour les tables très sollicitées
  • VACUUM FULL est un dernier recours — préférez pg_repack
  • Surveillez n_dead_tup et last_autovacuum
  • Corrigez les transactions longues qui bloquent le nettoyage

Vérification rapide

Quelle est la manière la plus sûre de récupérer de l'espace disque sur une table de production très sollicitée sans verrouillage prolongé ?

Questions Fréquemment Posées

La leçon « VACUUM, autovacuum, vacuum_cost_delay » est-elle gratuite ?

Oui — le texte complet de « VACUUM, autovacuum, vacuum_cost_delay » 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 « VACUUM, autovacuum, vacuum_cost_delay » ?

Ajustez les seuils d’autovacuum, vacuum_cost_delay et le VACUUM parallèle pour les grandes tables. 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 2 sur 4.

Combien de temps prend la leçon « VACUUM, autovacuum, vacuum_cost_delay » ?

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