Passer au contenu

Pourquoi ma vue matérialisée ne s'actualise-t-elle pas pour mon cluster Amazon Redshift ?

Lecture de 4 minute(s)
0

Ma vue matérialisée ne s'actualise pas pour mon cluster Amazon Redshift.

Brève description

Les scénarios suivants empêchent ou entraînent de longs délais d'exécution pour l'actualisation d'une vue matérialisée dans Amazon Redshift :

  • Les erreurs d'autorisation empêchent les opérations REFRESH MATERIALIZED VIEW.
  • Les opérations VACUUM et TRUNCATE simultanées de la table de base bloquent une actualisation et renvoient l'erreur suivante : « Invalid operation: Materialized view mv_name could not be refreshed as a base table changed physically due to vacuum/truncate concurrently. Please try again.
  • REFRESH MATERIALIZED VIEW ne peut pas être actualisé.
  • Les charges de travail actives bloquent les activités d'actualisation automatisées.

Résolution

Remarque : Pour les clusters Amazon Redshift sans serveur, utilisez les vues de surveillance SYS au lieu des vues système (STL, STV, SVL, SVV) utilisées dans les clusters provisionnés. Pour plus d'informations, consultez la section Mappage des vues système pour la migration vers les vues de surveillance SYS.

Erreurs d'autorisation REFRESH MATERIALIZED VIEW

Pour effectuer une opération REFRESH MATERIALIZED VIEW sur une vue matérialisée, vous devez en être le propriétaire. Vous devez également disposer du privilège SELECT sur les tables de base sous-jacentes et du privilège USAGE sur le schéma.

Pour effectuer des opérations de recalcul complètes, vous devez disposer du privilège CREATE sur le schéma. Pour plus d'informations sur la définition des privilèges, consultez la section GRANT.

Pour plus d'informations sur l'actualisation automatique, consultez la section Actualisation automatique d'une vue matérialisée.

L'erreur suivante se produit lorsque REFRESH MATERIALIZED VIEW et VACUUM sont soumis à une exécution simultanée sur la table de base : « Invalid operation: Materialized view mv_name could not be refreshed as a base table changed physically due to vacuum/truncate concurrently. Please try again; ».

Une fois l'opération terminée, soumettez de nouveau la commande REFRESH MATERIALIZED VIEW.

L’actualisation REFRESH MATERIALIZED VIEW échoue

Les opérations suivantes peuvent entraîner l'échec de l'actualisation des vues matérialisées :

  • Vous renommez ou supprimez une colonne.
  • Vous modifiez le type d'une colonne.
  • Vous modifiez le nom d'une table de base ou d'un schéma.

Remarque : Les vues matérialisées dans ces conditions peuvent être interrogées, mais elles ne peuvent pas être actualisées. Les contraintes s'appliquent même si la colonne n'est pas utilisée dans la vue matérialisée.

Exemples de messages d’erreur :

  • Detail: Procedure <mv_sp_*****_2_1> does not exist.
  • column <column name> does not exist.
  • DETAIL: schema «<schema name>« does not exist.
  • ERROR: Materialized view <my name> is unrefreshable as a base table was renamed.

Pour afficher l'activité d'actualisation de la vue matérialisée, utilisez SVL_MV_REFRESH_STATUS pour un cluster provisionné Amazon Redshift ou SYS_MV_REFRESH_HISTORY pour un cluster Amazon Redshift sans serveur.

Pour déterminer si les données de la vue matérialisée sont obsolètes et pour consulter les informations sur l'état de la vue matérialisée, utilisez STV_MV_INFO, SYS_MV_STATE ou SYS_MV_REFRESH_HISTORY.

Lorsqu'une vue matérialisée ne peut pas être actualisée, supprimez-la et recréez-la pour conserver les données actuelles.

Opération REFRESH MATERIALIZED VIEW de longue durée

La commande REFRESH MATERIALIZED VIEW s'exécute comme une requête normale sur votre cluster.

Pour vérifier l'exécution de la requête, effectuez les actions suivantes :

  • Pour vérifier les requêtes actives sur les données, utilisez STV_INFLIGHT.
  • Pour surveiller l'état actuel des requêtes WLM, utilisez STV_WLM_QUERY_STATE.
  • Pour examiner les requêtes actives et les étapes de requête sur les nœuds de calcul, utilisez STV_EXEC_STATE.

Pour surveiller les opérations REFRESH MATERIALIZED VIEW, utilisez les vues système suivantes :

  • Pour afficher les mises à jour en cours sur les tables de la base de données, utilisez STV_LOCKS.
  • Pour afficher la configuration de la classe de service pour WLM, utilisez STV_WLM_SERVICE_CLASS_CONFIG.
  • Pour déterminer si la vue matérialisée a reçu une actualisation incrémentielle ou complète, utilisez SVL_MV_REFRESH_STATUS.

Si les performances de REFRESH MATERIALIZED VIEW sont lentes, consultez la section Amélioration des performances des requêtes.

État d'actualisation masqué pendant la charge de travail active

Amazon Redshift donne la priorité à vos charges de travail par rapport à l'actualisation automatique. Cette hiérarchisation peut interrompre l'actualisation automatique pour maintenir les performances de votre charge de travail et retarder la mise à jour de certaines vues matérialisées. Certaines situations peuvent nécessiter un comportement d'actualisation plus prévisible pour vos vues matérialisées.

Pour faciliter un comportement d'actualisation prévisible, procédez comme suit :

  • Exécutez REFRESH MATERIALIZED VIEW manuellement.
  • La planification est actualisée via l'API ou la console du planificateur Amazon Redshift.
AWS OFFICIELA mis à jour il y a 7 mois