PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 17/02/2011 16:38:11

m.santiago
Membre

autovacuum

Bonjour,

Je vous écris ce message car j'aimerais avoir des éclaircissements sur le fonctionnement de autovacuum et notamment sur le déclenchement d'un VACUUM ou d'un ANALYZE sur une table donnée.
Si j'ai bien compris le VACUUM est déclenché sur une table si le nombre de lignes obsolètes dans cette table depuis le dernier VACUUM dépasse un seuil limite. Avec un paramétrage par défaut , ce seuil vaut environ 1/5 du nombre total de lignes dans la table.

Question 1 : Nombre de lignes obsolètes
Savez-vous comment est déterminé le nombre de lignes obsolètes ? Quelles sont les stats utilisées par autovacuum pour calculer le nombre de lignes obsolètes courants (c'est à dire depuis le dernier VACUUM effectué) sur une table donnée ? Est-ce que les lignes insérées sont prises en compte ?

Question 2 : Valeur du seuil
Je prends l'exemple d'une table contenant 80 millions de lignes, avec un paramétrage par défaut il faudra donc attendre que cette table contienne 16 millions de lignes obsolètes avant qu'un VACUUM ne soit automatiquement exécuté dessus. Or il peut s'écouler une longue période avant que ce seuil ne soit atteint.. ce qui me parait étrange car j'avais compris qu'il fallait exécuter VACUUM régulièrement si on voulait qu'il soit efficace.
Ma question : A partir de quel moment doit-on se décider à exécuter un VACUUM manuel sur une table ou à re-paramétrer autovacuum ? Y a-t-il des indicateurs (nombre de lignes, etc.) ?

D'avance merci pour votre attention.

Miguel

Hors ligne

#2 17/02/2011 16:48:26

Marc Cousin
Membre

Re : autovacuum

1: C'est la colonne n_dead_tup de pg_stat_all_tables qui est prise en compte
Non les lignes insérées ne sont pas prises en compte pour le déclenchement d'un vacuum: elles ne créent pas d'enregistrements obsolètes. Par contre, c'est pris en compte pour un autoanalyze
2: régulièrement= régulièrement par rapport à l'activité de la table. Le paramétrage par défaut est correct, sauf dans des cas extrèmes. Imaginons, pour être dans l'extrème de l'extrème, que vous ayez votre table de 80 millions d'enregistrements, mais qu'il y en ait une centaine qui soient mises à jour en permanences, et qu'elles. Ça veut dire qu'on doit attendre que chacune d'entre elle ait 160 000 versions différentes en base avant qu'autovacuum ne se déclenche. Évidemment, on est dans un cas particulier, et si c'est le cas (c'est très rare), il faut paramétrer autovacuum différemment pour cette table.

J'ai tendance à laisser autovacuum tel qu'il est, et lancer un vacuum de tout (tant que ça reste possible) pendant une plage de maintenance (donc d'activité réduite), quotidiennement si possible. Le raisonnement derrière étant qu'autovacuum ne peut pas savoir que c'est une période calme. Et qu'en faisant ce traitement, je «prends de l'avance» sur ce qu'autovacuum aurait peut-être voulu déclencher pendant une période de forte activité.


Marc.

Hors ligne

#3 17/02/2011 16:56:53

m.santiago
Membre

Re : autovacuum

Merci pour votre réponse qui est très claire. Bonne journée !

Miguel

Hors ligne

Pied de page des forums