Aller au contenu

Autoanalyze

Déclenchement de l’autoanalyze

L’analyse automatique d’une table est déclenchée lorsqu’une activité significative a été accumulée sur cette table. Ce niveau d’activité est contrôlé par les paramètres de configuration autovacuum_analyze_threshold et autovacuum_analyze_scale_factor.

L’analyse se déclenche lorsque autovacuum_analyze_scale_factor pour cent des lignes de la table et autovacuum_analyze_threshold lignes ont été modifiées depuis le dernier déclenchement. La formule de calcul est la suivante :

(float4) autovacuum_analyze_threshold + autovacuum_analyze_scale_factor * reltuples;

Cas d’arrêt de l’autoanalyze

Il est possible que l’autoanalyze soit interrompu lorsqu’un conflit de verrouillage sur la table se produit. Si cela arrive, l’autovacuum logue le message suivant :

2016-02-25 11:50:44 CET [2558]: [52-1] LOG:  skipping analyze of "test_table" --- lock not available

et annule son analyse statistique. Cela n’est pas critique, comme indiqué par le niveau de log LOG et non WARNING ou ERROR. L’autovacuum tentera de nouveau de procéder à l’analyse de la table lors du prochain cycle.

Les conflits de verrouillage sur la table analysée peuvent provenir de l’une des opérations suivantes exécutées en parallèle sur la même table ou qui ont été exécutées précédemment dans une transaction toujours ouverte :

  • VACUUM ;
  • ANALYZE ;
  • CREATE INDEX ;
  • ALTER TABLE ;
  • DROP TABLE ;
  • TRUNCATE ;
  • CLUSTER ;
  • LOCK TABLE.

Pour identifier la cause réelle de cet arrêt, il est recommandé d’examiner les vues pg_locks et pg_stat_activity pendant que le problème se produit.