web-dev-qa-db-fra.com

Analyser nécessaire après une vision matérialisée sur rafraîchissement?

Sommes-nous censés courir ANALYZE myview; sur une vue de PostgreSQL 9.6+ Matérialisée après avoir exécuté A REFRESH MATERIALIZED VIEW CONCURRENTLY myview;?

Ou est-ce inutile (peut-être que les statistiques d'index sont déjà mises à jour sur rafraîchir?)

5
Nicolas Payart

Les statistiques de la table sont ( non Mise à jour automatiquement.

  • Ils restent inchangés si rafraîchis avec l'option CONCURRENTLY.

  • Sans CONCURRENTLY, un nouveau fichier est écrit pour la table et les comptes de base relpages et reltuples dans le catalogue système pg_class sont par conséquent réinitialisés à 0. Statistiques de table (par colonne) dans pg_statistic restent toujours inchangés, cependant.

J'ai couru un test rapide à Postgres 9.6 pour confirmer.

Dans certains cas (lorsque les plans de requête ne dépendent pas beaucoup des statistiques actuelles), vous pouvez enregistrer le temps et non ANALYZE du tout. Dans tous les autres cas, vous aurez/besoin de planifier un manuel ANALYZE myview; juste après le REFRESH. Ou vous attendez jusqu'à ce que la touche Autovacuum, ce qui ne se passe que si suffisamment de lignes ont été modifiées (CONCURRENTLY exécute des commandes DDL sur le MV pour affecter uniquement les lignes modifiées.)

7
Erwin Brandstetter