Amazon Redshift クラスターのマテリアライズドビューが更新されません。
簡単な説明
次のシナリオでは、Amazon Redshift においてマテリアライズドビューが更新されなかったり、更新の完了に時間がかかったりします。
- アクセス許可のエラーが原因で REFRESH MATERIALIZED VIEW 操作に失敗する。
- ベーステーブルでの VACUUM と TRUNCATE の同時操作が原因で更新がブロックされると、次のエラーが返されます。 「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 VIEW と VACUUM を送信し、ベーステーブルで同時に実行すると、次のエラーが発生します。 「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_INFO、SYS_MV_STATE、または SYS_MV_REFRESH_HISTORY を使用します。
マテリアライズドビューを更新できない場合は、削除して再作成し、現在のデータを維持してください。
長時間実行中の REFRESH MATERIALIZED VIEW 操作
REFRESH MATERIALIZED VIEW コマンドは、クラスターで通常のクエリとして実行されます。
クエリの実行を確認するには、次の操作を行います。
REFRESH MATERIALIZED VIEW 操作を監視するには、次のシステムビューを使用します。
REFRESH MATERIALIZED VIEW のパフォーマンスが遅い場合は、「クエリのパフォーマンスを改善する」を参照してください。
アクティブなワークロード中の非表示の更新ステータス
Amazon Redshift では、自動更新よりもワークロードが優先されます。この優先度が原因で、ワークロードのパフォーマンスを維持するために自動更新が停止し、一部のマテリアライズドビューの更新が遅れる可能性があります。状況によっては、マテリアライズドビューの更新動作を予測しやすくする必要が生じる場合があります。
更新動作を予測しやすくするには、次の手順を実行します。
- REFRESH MATERIALIZED VIEW を手動で実行します。
- Amazon Redshift スケジューラー API またはコンソールを使用して更新をスケジュールします。