为什么我的 Amazon Redshift 集群的实例化视图没有刷新?

上次更新日期:2022 年 10 月 26 日

我的 Amazon Redshift 集群的实例化视图没有刷新。为什么会发生这种情况?如何刷新我的物化视图?

简短描述

以下情形可能会导致 Amazon Redshift 中的实例化视图无法刷新或需要很长时间才能完成:

  • REFRESH MATERIALIZED VIEW 因权限错误而失败
  • 您会看到这样的错误讯息: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 已提交并运行了很长时间
  • 由于工作负载处于活动状态,刷新活动未显示在自动刷新中

解决方法

REFRESH MATERIALIZED VIEW 因权限错误而失败

要对实体化视图执行 REFRESH MATERIALIZED VIEW 操作,您必须是所有者。此外,您必须具有以下特权:

  • 基础基表上的 SELECT 特权
  • 模式上的 USAGE 特权

如果实体化视图是完全重新计算而不是增量刷新,则还必须具有该架构的 CREATE 权限。要定义权限,请参阅 GRANT。有关详细信息,请参阅自动刷新实例化视图

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 VIEWVACUUM 以在基表上并发运行时,会出现此错误。操作完成后,可以重新提交 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 充当在集群上运行的普通查询。要确认查询正在运行,请执行以下操作:

  • 要查看在数据上运行的活动查询,请使用 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 性能缓慢的问题,请参阅 Improve query performance

由于工作负载处于活动状态,刷新活动未显示在自动刷新中

Amazon Redshift 优先考虑您的工作负载而不是自动刷新。这种优先级设置可能会停止自动刷新以保持工作负载的性能,并可能延迟某些实例化视图的刷新。在某些情况下,您的实例化视图可能需要更具确定性的刷新行为。要创建更具确定性的刷新行为,请使用以下方法:

  • 手动刷新,如 REFRESH MATERIALIZED VIEW 中所述
  • 使用 Amazon Redshift 计划程序 API 操作或控制台进行计划刷新

有关详细信息,请参阅自动刷新实例化视图


这篇文章对您有帮助吗?


您是否需要账单或技术支持?