

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 自动实体化视图
<a name="materialized-view-auto-mv"></a>

本主题介绍 Amazon Redshift 如何使用自动实体化视图来提高性能。Amazon Redshift 会根据数据库活动和性能自动创建实体化视图。默认情况下，Amazon Redshift 使用自动实体化视图。

实体化视图是一个提高 Amazon Redshift 查询性能的强大工具。它们通过存储预先计算的结果集来实现这一目的。类似的查询不必每次重新运行相同的逻辑，因为它们可以从现有结果集中检索记录。开发人员和分析师在分析工作负载后创建实体化视图，以确定哪些查询将受益，以及是否值得为每个实体化视图支付维护费用。随着工作负载的增长或变化，必须对这些实体化视图进行审查，以确保它们继续提供显著的性能优势。

Redshift 中的自动实体化视图（AutoMV）功能通过基于工作负载监控和机器学习算法来自动创建和管理实体化视图，从而提高查询性能。以下内容介绍 AutoMV 的主要功能：
+ *持续监控*：Redshift 使用机器学习技术来持续监控工作负载，以便通过创建实体化视图来识别改善性能的机会。
+ *自动创建和删除*：当系统检测到实体化视图有益时，它会自动创建和维护该视图。相反，如果先前创建的 AutoMV 不再提供性能优势，则系统将自动丢弃它。
+ *无需用户活动*：AutoMV 功能仅在用户活动较少或集群上运行的工作负载较低的时段运行。这可确保 AutoMV 操作不会干扰或影响客户的工作负载。
+ *CPU 使用率峰值*：在没有工作负载活动期间，AutoMV 创建或刷新实体化视图可能会导致 CPU 使用率激增。这是一种正常行为，因为系统会利用可用资源来创建和刷新实体化视图。
+ *用户工作负载优先级*：如果您在 AutoMV 操作正在进行时启动工作负载，则 AutoMV 任务将停止，以便为用户工作负载释放资源。这可确保您的工作负载优先于 AutoMV 操作。

虽然 AutoMV 功能可能会在没有用户活动期间导致 CPU 使用率激增，但它透明地运行，而不会影响您的工作负载。系统管理实体化视图以提高查询性能，同时使用户工作负载优先于 AutoMV 操作。

AutoMV 的行为和功能与用户创建的实体化视图的相同。它们使用相同的标准和限制自动递增刷新。与用户创建的实体化视图一样，[自动查询重写以使用实体化视图](materialized-view-auto-rewrite.md)识别可受益于系统创建的 AutoMV 的查询。它会自动重写这些查询以使用 AutoMV，从而提高查询性能。开发人员无需修订查询即可利用 AutoMV。

**注意**  
自动实体化视图会间歇性刷新。重写查询以使用 AutoMV 始终会返回最新结果。当 Redshift 检测到数据不是最新时，不会将查询重写为从自动实体化视图读取。相反，查询会从基表中选择最新数据。

任何重复使用的查询的工作负载都可受益于 AutoMV。常见使用案例包括：
+ *控制面板* – 控制面板广泛用于快速查看关键业务指标 (KPI)、事件、趋势和其它指标。它们通常具有包含图表和表格的通用布局，但会针对筛选或维度选择操作（如向下钻取）显示不同的视图。控制面板通常有一组重复使用不同参数的常用查询。控制面板查询可极大地受益于自动实体化视图。
+  *报告* – 根据业务要求和报告类型，可以以不同频率计划报告查询。此外，可以自动查询，也可按需查询。报告查询的一个共同特征是它们可能会长时间运行并占用大量资源。借助 AutoMV，这些查询不需要在每次运行时重新计算这些查询，从而减少 Redshift 中每个查询的运行时间和资源利用率。

要关闭自动实体化视图，请将 `auto_mv` 参数组更新为 `false`。有关更多信息，请参阅《Amazon Redshift 集群管理指南》中的 [Amazon Redshift 参数组](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html)。

## 自动实体化视图的 SQL 作用域和注意事项
<a name="materialized-view-auto-mv-important"></a>
+ 自动实体化视图可以由查询或子查询启动和创建，前提是它包含 `GROUP BY` 子句或下列聚合函数之一：SUM、COUNT、MIN、MAX 或 AVG。但它不能包含以下任何内容：
  + Left、right 或 full outer 联接
  + SUM、COUNT、MIN、MAX 和 AVG 之外的聚合函数。（这些特定函数适用于自动查询重写。）
  + 任何包含 DISTINCT 的聚合函数
  + 任意窗口函数
  + SELECT DISTINCT 或 HAVING 子句
  + 其他实体化视图

  无法保证满足条件的查询将启动自动实体化视图的创建。系统根据其对工作负载的预期好处和资源维护成本（包括系统更新成本）来确定从哪个候选项创建视图。每个生成的实体化视图可通过自动重写查询来使用。
+ 即使 AutoMV 可能由子查询或集合运算符的各个分支启动，生成的实体化视图也不包含子查询或集合运算符。
+ 要确定 AutoMV 是否用于查询，请查看 EXPLAIN 计划并在输出中查找 `%_auto_mv_%`。有关更多信息，请参阅 [EXPLAIN](https://docs.aws.amazon.com/redshift/latest/dg/r_EXPLAIN.html)。
+ 外部表（如数据共享和联合表）不支持自动实体化视图。

## 自动实体化视图的限制
<a name="materialized-view-auto-mv-limitations"></a>

以下是使用自动实体化视图的限制：
+ *最大 AutoMV 数* – 集群中每个数据库的自动实体化视图数的上限为 200 个。
+ *存储空间和容量* – AutoMV 的一个重要特征是，使用备用后台周期执行它以帮助实现用户工作负载不受影响。如果集群繁忙或存储空间不足，AutoMV 将停止其活动。具体来说，在总集群容量达到 80% 时，不会创建新的自动实体化视图。在总容量达到 90% 时，可能会删除它们，以方便用户工作负载继续运行，而不会降低性能。有关确定集群容量的更多信息，请参阅 [STV\$1NODE\$1STORAGE\$1CAPACITY](r_STV_NODE_STORAGE_CAPACITY.md)。

## 自动实体化视图的计费
<a name="materialized-view-auto-mv-billing"></a>

 Amazon Redshift 的自动优化功能可创建和刷新自动实体化视图。对于此过程不收取计算资源费用。自动实体化视图的存储按常规存储费率收费。有关更多信息，请参阅 [Amazon Redshift 定价](https://aws.amazon.com/redshift/pricing/)。

## 其他 资源
<a name="materialized-view-auto-mv-resources"></a>

 以下博客文章进一步解释了自动实体化视图。其中详细说明了如何创建、维护和删除它们。还解释了推动这些决策的基础算法：[使用自动实体化视图优化 Amazon Redshift 查询性能](https://aws.amazon.com/blogs//big-data/optimize-your-amazon-redshift-query-performance-with-automated-materialized-views/)。

 该视频首先解释了实体化视图，并展示了它们如何提高性能和节约资源。然后，它通过过程流动画和实况演示对自动实体化视图进行了深入的解释。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/-85GSBQOBTA/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/-85GSBQOBTA)
