Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Déterminer si les tables de votre base de données ont besoin d'une opération VACUUM
Vous pouvez utiliser la requête suivante pour afficher le nombre de transactions non vidées dans une base de données. La datfrozenxid
colonne de la pg_database
ligne d'une base de données est la limite inférieure de la transaction normale qui IDs apparaît dans cette base de données. Cette colonne représente le minimum des valeurs relfrozenxid
par table au sein de la base de données.
SELECT datname, age(datfrozenxid) FROM pg_database ORDER BY age(datfrozenxid) desc limit 20;
Par exemple, les résultats de l'exécution de la requête précédente pourraient être les suivants.
datname | age mydb | 1771757888 template0 | 1721757888 template1 | 1721757888 rdsadmin | 1694008527 postgres | 1693881061 (5 rows)
Lorsque l'âge d'une base de données atteint 2 milliards de transactionsIDs, l'ID de transaction (XID) est contourné et la base de données passe en lecture seule. Vous pouvez utiliser cette requête pour produire une métrique et l'exécuter plusieurs fois par jour. Par défaut, autovacuum est défini pour conserver un âge de transactions inférieur à 200,000,000 (autovacuum_freeze_max_age
Un exemple de politique de surveillance peut ressembler à ceci :
-
Définissez la valeur
autovacuum_freeze_max_age
sur 200 millions de transactions. -
Si une table atteint les 500 millions de transactions non vidées, elle déclenche une alarme de faible gravité. Ce n'est pas une valeur déraisonnable, mais elle peut indiquer que la fonction d'autovacuum ne suit pas.
-
Si l'âge d'une table atteint 1 milliard, cela doit être considéré comme une alarme exigeant une action. En général, il est conseillé de conserver des âges plus proches de
autovacuum_freeze_max_age
pour des raisons de performances. Nous vous recommandons d'enquêter en appliquant les recommandations suivantes. -
Si une table atteint les 1,5 million de transactions non vidées, elle déclenche une alarme de haute gravité. Selon la rapidité avec laquelle votre base de données utilise les transactionsIDs, cette alarme peut indiquer que le système n'a plus le temps d'exécuter Autovacuum. Dans ce cas, nous vous recommandons une résolution immédiate.
Si une table enfreint constamment ces seuils, vous devez continuer à modifier vos paramètres d'autovacuum. Par défaut, l'utilisation VACUUM manuelle (qui permet de désactiver les délais basés sur les coûts) est plus agressive que l'utilisation de l'aspirateur automatique par défaut, mais elle est également plus intrusive pour le système dans son ensemble.
Nous vous recommandons la procédure suivante :
-
Gardez tout cela à l'esprit et activez un mécanisme de surveillance afin de connaître l'âge de vos transactions les plus anciennes.
Pour plus d'informations sur la création d'un processus qui vous avertit de l'encapsulation des identifiants de transaction, consultez le billet de blog de la AWS base de données Implémentation d'un système d'alerte précoce pour l'encapsulation des identifiants de transaction dans Amazon RDS pour Postgre
. SQL -
Pour les tables plus occupées, procédez régulièrement au gel manuel du processus de vacuum pendant une fenêtre de maintenance, en plus de compter sur la fonction d'autovacuum. Pour plus d'informations sur le gel manuel du processus vacuum, veuillez consulter Réalisation d'un gel manuel du processus vacuum.