スキップしてコンテンツを表示

Amazon Redshift クラスターのマテリアライズドビューが更新されない理由を知りたいです。

所要時間2分
0

Amazon Redshift クラスターのマテリアライズドビューが更新されません。

簡単な説明

次のシナリオでは、Amazon Redshift においてマテリアライズドビューが更新されなかったり、更新の完了に時間がかかったりします。

  • アクセス許可のエラーが原因で REFRESH MATERIALIZED VIEW 操作に失敗する。
  • ベーステーブルでの VACUUMTRUNCATE の同時操作が原因で更新がブロックされると、次のエラーが返されます。 「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 を更新できない。
  • アクティブなワークロードが原因で、自動更新アクティビティがブロックされる。

解決策

注: Amazon Redshift Serverless クラスターでは、プロビジョニングされたクラスターで使用されるシステムビュー (STL、STV、SVL、SVV) ではなく、SYS モニタリングビューを使用してください。詳細については、「SYS モニタリングビューへの移行用のシステムビューマッピング」を参照してください。

REFRESH MATERIALIZED VIEW のアクセス許可に関するエラー

マテリアライズドビューで REFRESH MATERIALIZED VIEW 操作を実行するには、所有者である必要があります。さらに、基盤ベーステーブルに対する SELECT 権限および、スキーマに対する USAGE 権限も必要です。

完全な再計算操作を行うには、スキーマに対する CREATE 権限が必要です。権限を定義する方法の詳細については、「GRANT」を参照してください。

自動更新の詳細については、「マテリアライズドビューの自動更新」を参照してください。

REFRESH MATERIALIZED VIEWVACUUM を送信し、ベーステーブルで同時に実行すると、次のエラーが発生します。 「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 コマンドを再送信してください。

REFRESH MATERIALIZED VIEW の更新が失敗する

次の操作では、マテリアライズドビューの更新が失敗する可能性があります。

  • 列の名前を変更したり、列をドロップしたりした場合。
  • 列のタイプを変更した場合。
  • ベーステーブルまたはスキーマの名前を変更した場合。

注: これらの状態にあるマテリアライズドビューはクエリできますが、更新することはできません。この制約は、該当する列がマテリアライズドビューで使用されていない場合も適用されます。

エラーメッセージの例:

  • 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.

マテリアライズドビューの更新アクティビティを確認するには、Amazon Redshift プロビジョンドクラスターの SVL_MV_REFRESH_STATUS、または Amazon Redshift Serverless クラスターの SYS_MV_REFRESH_HISTORY を使用します。

マテリアライズドビュー内のデータが古くなっているかどうかを確認し、マテリアライズドビューの状態に関する情報を確認するには、STV_MV_INFOSYS_MV_STATE、または SYS_MV_REFRESH_HISTORY を使用します。

マテリアライズドビューを更新できない場合は、削除して再作成し、現在のデータを維持してください。

長時間実行中の REFRESH MATERIALIZED VIEW 操作

REFRESH MATERIALIZED VIEW コマンドは、クラスターで通常のクエリとして実行されます。

クエリの実行を確認するには、次の操作を行います。

  • データに対してアクティブなクエリを確認するには、STV_INFLIGHT を使用します。
  • 現在の WLM クエリの状態を監視するにはSTV_WLM_QUERY_STATE を使用します。
  • コンピュートノード上のアクティブなクエリとクエリステップを確認するには、STV_EXEC_STATE を使用します。

REFRESH MATERIALIZED VIEW 操作を監視するには、次のシステムビューを使用します。

  • データベース内のテーブルに現在行われている更新を確認するには、STV_LOCKS を使用します。
  • WLM のサービスクラス設定を確認するには、STV_WLM_SERVICE_CLASS_CONFIG を使用します。
  • マテリアライズドビューが増分更新か完全更新かを判断するには、SVL_MV_REFRESH_STATUS を使用します。

REFRESH MATERIALIZED VIEW のパフォーマンスが遅い場合は、「クエリのパフォーマンスを改善する」を参照してください。

アクティブなワークロード中の非表示の更新ステータス

Amazon Redshift では、自動更新よりもワークロードが優先されます。この優先度が原因で、ワークロードのパフォーマンスを維持するために自動更新が停止し、一部のマテリアライズドビューの更新が遅れる可能性があります。状況によっては、マテリアライズドビューの更新動作を予測しやすくする必要が生じる場合があります。

更新動作を予測しやすくするには、次の手順を実行します。

  • REFRESH MATERIALIZED VIEW を手動で実行します。
  • Amazon Redshift スケジューラー API またはコンソールを使用して更新をスケジュールします。
AWS公式更新しました 8ヶ月前
コメントはありません

関連するコンテンツ