我的具體化檢視未針對 Amazon Redshift 叢集重新整理。為什麼會發生這種情況,以及如何讓我的具體化檢視重新整理?
簡短描述
下列情況可能會導致 Amazon Redshift 中的具體化檢視無法重新整理,或需要很長時間才能完成:
- REFRESH MATERIALIZED VIEW 執行失敗並顯示許可錯誤
- 您會看到錯誤:無效的操作:無法重新整理具體化檢視 mv_name,因為基礎資料表由於同時進行真空/截斷而實際變更。請再試一次;
- REFRESH MATERIALIZED VIEW 無法重新整理
- REFRESH MATERIALIZED VIEW 已提交並執行很長時間
- 由於存在作用中工作負載,重新整理活動不會顯示在自動重新整理上
解決方案
REFRESH MATERIALIZED VIEW 執行失敗並顯示許可錯誤
您必須是擁有者,才能對具體化檢視執行 REFRESH MATERIALIZED VIEW 操作。此外,您必須具備下列權限:
- 針對底層基礎資料表上的 SELECT 權限
- 針對結構描述的 USAGE 權限
如果具體化檢視經過完整重新運算而非累加式重新整理,您還必須擁有針對結構描述的 CREATE 權限。若要定義權限,請參閱 GRANT。如需詳細資訊,請參閱自動重新整理具體化檢視。
無效的操作:無法重新整理具體化檢視 mv_name,因為基礎資料表由於同時進行真空/截斷而實際變更。請再試一次;
當提交 REFRESH MATERIALIZED VIEW 和 VACUUM 以在基礎資料表上並行執行時,就會發生錯誤。操作完成後,即可重新提交 REFRESH MATERIALIZED VIEW。
REFRESH MATERIALIZED VIEW 無法重新整理
無法重新整理的具體化檢視可能是由下列操作所造成:
- 重新命名或刪除欄。
- 變更欄的類型。
- 變更基礎資料表或結構描述的名稱
**注意:**您可以查詢此情況下的具體化檢視,但無法對其重新整理。即使具體化檢視中未使用該欄,上述條件約束也會套用。
若要瞭解具體化檢視中的資料是否過時,以及具體化檢視狀態資訊,請使用 STV_MV_INFO。若要檢視具體化檢視的重新整理活動,請使用 SVL_MV_REFRESH_STATUS。在此無法重新整理的具體化檢視狀態中,您必須刪除並重新建立具體化檢視,讓具體化檢視保持在最新狀態。
以下是您可能會看到的錯誤訊息範例:
```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 <mv namme> is unrefreshable as a base table was renamed.```
REFRESH MATERIALIZED VIEW 已提交並執行很長時間
REFRESH MATERIALIZED VIEW 做為在叢集上執行的一般查詢發揮作用。若要確認查詢是否正在執行,請執行下列動作:
REFRESH MATERIALIZED VIEW 操作效能受下列因素影響:
如果您遇到 REFRESH MATERIALIZED VIEW 效能變慢,請參閱改善查詢效能。
由於存在作用中工作負載,重新整理活動不會顯示在自動重新整理上
Amazon Redshift 會優先處理您的工作負載,而不是自動重新整理。此優先順序可能會停止自動重新整理以保留工作負載的效能,並可能會延遲某些具體化檢視的重新整理。在某些情況下,您的具體化檢視可能需要更具決定性的重新整理行為。若要建立更具決定性的重新整理行為,請使用下列指令:
如需詳細資訊,請參閱自動重新整理具體化檢視。