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 01/10/2015 11:23:55

Brackis
Membre

Autovacuum

Bonjour à tous

Je poste ici quelques questions en rapport avec l'autovacuum qui me laisse perplexe et j'aimerais avoir des éclaircissement si possible

Version de postgresql utilisé 9.3.9.
Environnement : Windows

1/ J'ai lu à plusieurs endroits que l'autovacuum était par défaut activé dans postgresql

Or j'ai aussi lu ceci :
"23.1.6. Le démon auto-vacuum
PostgreSQL ™ dispose d'une fonctionnalité optionnelle mais hautement recommandée appelée autovacuum, dont le but est d'automatiser l'exécution des commandes VACUUM et ANALYZE .Une fois activé , autovacuum vérifie les tables ayant un grand nombre de lignes insérées, mises à jour ou supprimées. Ces vérifications utilisent la fonctionnalité de récupération de statistiques ; du coup, autovacuum ne peut pas être utilisé sauf si track_counts est configuré à true. Dans la configuration par défaut, l'autovacuum est activé et les paramètres liés sont correctement configurés.
"

Ce texte en gras ne semble il pas indiqué le contraire ?

Sachant que dans le fichier de config installé par défaut toutes les ligne en relation avec l'autovacuum sont commenté

#------------------------------------------------------------------------------
# AUTOVACUUM PARAMETERS
#------------------------------------------------------------------------------

#autovacuum = on            # Enable autovacuum subprocess?  'on'
                    # requires track_counts to also be on.
#log_autovacuum_min_duration = -1    # -1 disables, 0 logs all actions and
                    # their durations, > 0 logs only
                    # actions running at least this number
                    # of milliseconds.
#autovacuum_max_workers = 3        # max number of autovacuum subprocesses
                    # (change requires restart)
#autovacuum_naptime = 1min        # time between autovacuum runs
#autovacuum_vacuum_threshold = 50    # min number of row updates before
                    # vacuum
#autovacuum_analyze_threshold = 50    # min number of row updates before
                    # analyze
#autovacuum_vacuum_scale_factor = 0.2    # fraction of table size before vacuum
#autovacuum_analyze_scale_factor = 0.1    # fraction of table size before analyze
#autovacuum_freeze_max_age = 200000000    # maximum XID age before forced vacuum
                    # (change requires restart)
#autovacuum_multixact_freeze_max_age = 400000000    # maximum Multixact age
                    # before forced vacuum
                    # (change requires restart)
#autovacuum_vacuum_cost_delay = 20ms    # default vacuum cost delay for
                    # autovacuum, in milliseconds;
                    # -1 means use vacuum_cost_delay
#autovacuum_vacuum_cost_limit = -1    # default vacuum cost limit for
                    # autovacuum, -1 means use
                    # vacuum_cost_limit

2/ Si effectivement l'autovacuum est activé par défaut

Pourquoi lorsque j'ouvre pgadmin et que je sélectionne certaine table il m'affiche un message d'aler m'indiquant qu'un vacuum est recommandé ?

Running VACUUM recommended
The estimated rowcount on the table "template" deviates significantly from the actual rowcount. You should run VACUUM ANALYZE on this table.
Instead of issuing a manual VACUUM ANALYZE command on this table (you can use the pgAdmin III maintenance menu for this), running VACUUM ANALYZE on a regular or automated basis should be considered. This can be achieved using a scheduler. PostgreSQL also supplies the autovacuum daemon, which will track changes made to the database and issue vacuum commands as required automatically. In most cases, autovacuum will be the best choice.

Sachant en plus que cette table dans mon exemple n'a pas changé d'un iota depuis la création de la table et l'insertion des lignes par défaut:

Désolé s mes questions peuvent paraitre bête je débute avec postgre

D'avance merci

Cordialement

Hors ligne

#2 01/10/2015 12:00:14

ruizsebastien
Membre

Re : Autovacuum

Bonjour,

Autovacuum est activé par défaut.
Vous pouvez vérifier cela dans pg_settings.

Maintenant le fait que pgadmin vous prévient qu'il faille faire un vacuum (c'est différent de autovacuum !!) c'est probablement du au fait que le last_vacuum de la table pg_stat_all_tables pour votre table "template" doit être vide ("null") ou trop vieux.

Cordialement.


Cordialement,

Sébastien.

Hors ligne

#3 01/10/2015 22:36:26

gleu
Administrateur

Re : Autovacuum

Maintenant le fait que pgadmin vous prévient qu'il faille faire un vacuum (c'est différent de autovacuum !!) c'est probablement du au fait que le last_vacuum de la table pg_stat_all_tables pour votre table "template" doit être vide ("null") ou trop vieux.

Non, cette astuce a été codée bien avant l'arrivée de cette colonne dans pg_stat_user_tables. Il suit une autre heuristique, bien obsolète. Pour le dire autrement, l'astuce de pgAdmin peut être tranquillement ignorée.

Pourquoi lorsque j'ouvre pgadmin et que je sélectionne certaine table il m'affiche un message d'aler m'indiquant qu'un vacuum est recommandé ?

Ce n'est pas parce que l'autovacuum est activé qu'il est forcément bien configuré.


Guillaume.

Hors ligne

#4 02/10/2015 09:15:59

Brackis
Membre

Re : Autovacuum

Bonjour

Merci pour ces retours

dès lors j'ai une dernière question

ma fameuse table template alors qu'elle n'a jamais changé depuis son installation peut avoir après un ANALYZE plusieurs "row dead"

Je croyais que ces ligne morte était due au opération de delete ?

Hors ligne

#5 02/10/2015 15:56:31

gleu
Administrateur

Re : Autovacuum

Une ligne morte peut être dû à un DELETE, mais aussi à un UPDATE ou à un INSERT/COPY rollbacké.


Guillaume.

Hors ligne

Pied de page des forums