Configurer les paramètres du serveur de nettoyage automatique
Le processus de nettoyage est configuré à l’aide des paramètres du serveur autovacuum, qui vous permettent d’optimiser le processus de nettoyage pour votre charge de travail. Dans le portail Azure, sélectionnez votre serveur Azure Database pour PostgreSQL, puis sélectionnez Paramètres du serveur dans le menu de gauche. Dans la barre de recherche, entrez nettoyage automatique. Vous pouvez également utiliser SQL pour interroger les vues de catalogue système pour rechercher la configuration actuelle du nettoyage automatique à l’aide de la requête suivante.
SELECT *
FROM pg_settings
WHERE "name" LIKE '%autovacuum%';
| Nom du paramètre | Par défaut | Descriptif |
|---|---|---|
| nettoyage automatique | ACTIVÉ | Active ou désactive le processus du serveur de nettoyage automatique. Le nettoyage automatique doit toujours être activé. |
| autovacuum_analyze_scale_factor | 0.1 | Spécifie une fraction de la taille de la table à ajouter à autovacuum_vacuum_threshold lors de la décision de déclenchement d’une opération de nettoyage. Par exemple, 0,2 représente 20 % de la taille totale de la table. |
| autovacuum_analyze_threshold | 50 | Nombre de lignes insérées, mises à jour ou supprimées nécessaires pour déclencher le processus d’analyse pour une table. |
| autovacuum_freeze_max_age | 200000000 | Âge maximal (en transactions) avant de déclencher un nettoyage automatique sur une table pour empêcher le bouclage de l’ID de transaction. |
| autovacuum_max_workers | 3 | Nombre maximal de processus de nettoyage automatique en cours d’exécution à tout moment, autre que le lanceur de nettoyage automatique. |
| autovacuum_multixact_freeze_max_age | 400000000 | Âge maximal (dans multixact) avant de déclencher le nettoyage automatique sur une table pour empêcher le bouclage de multixact. |
| autovacuum_naptime | 60 secondes | Délai entre les processus de nettoyage automatique sur une base de données. Dans chaque tour, le démon examine la base de données et émet des commandes VACUUM et ANALYZE en fonction des besoins pour les tables de cette base de données. |
| autovacuum_vacuum_cost_limit | -1 | Coût maximal pour les opérations de vide automatique. Si -1 est spécifié, qui est la valeur par défaut, la valeur de vacuum_cost_limit régulière est utilisée. S’il existe plusieurs Workers, la valeur est répartie proportionnellement entre les Workers de nettoyage automatique actuellement exécutés. La somme pour chaque travailleur ne peut pas dépasser la valeur de cette variable. |
| autovacuum_vacuum_insert_threshold | 1 000 | Nombre de lignes insérées qui déclenchent un nettoyage pour une table. |
| autovacuum_vacuum_scale_factor | 0.2 | Utilisé avec autovacuum_vacuum_threshold. Fraction d’une table utilisée pour déterminer le déclenchement d’un nettoyage. |
| autovacuum_vacuum_threshold | 50 | Nombre minimal de lignes mises à jour, insérées ou supprimées pour déclencher un nettoyage pour une table. |
| autovacuum_vacuum_insert_scale_factor | 0.2 | Spécifie une fraction de la taille de la table à ajouter à autovacuum_vacuum_insert_threshold pour déclencher le processus de nettoyage. |
| autovacuum_work_mem | - 1 Ko | Mémoire maximale que chaque processus de nettoyage automatique peut utiliser. |
| log_autovacuum_min_duration | -1 | Le temps en millisecondes, consigné par les actions d'autovacuum. |
Le processus de vide ne doit pas être exécuté trop fréquemment, ou trop rarement. La fréquence optimale dépend de la charge de travail. Testez chacun des paramètres de nettoyage automatique pour trouver ce qui convient le mieux à votre charge de travail. Le coût du processus de nettoyage comprend les éléments suivants :
- Les pages de données sont verrouillées quand le nettoyage s’exécute.
- Le processus de vide consomme le temps de calcul et la mémoire.
Optimiser le vide au niveau de la table
Dans Azure Database pour PostgreSQL, les paramètres de nettoyage automatique peuvent être définis au niveau de la table. Lorsque certaines tables sont mises à jour plus que d’autres, elles peuvent améliorer les performances. Exemple de définition de l’autovacuum au niveau de la table :
ALTER TABLE mytable SET (autovacuum_vacuum_threshold = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.1);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_delay = 10);
Au niveau de la table, l'autovacuum est un processus synchrone. Plus le pourcentage de tuples morts d’une table est élevé, plus le « coût » facturé par le processus de nettoyage automatique est élevé.
Pour les tables avec un taux élevé de mises à jour, envisagez de fractionner la table en plusieurs tables. Ce fractionnement permet de paralléliser le nettoyage automatique et de réduire le « coût » par table. Vous pouvez aussi augmenter le nombre de Workers de nettoyage automatique parallèle.