首页 » ORACLE [C]系列, ORACLE 9i-23c » Oracle 21c 新特性: Automatic Materialized Views

Oracle 21c 新特性: Automatic Materialized Views

在oracle database 21c版本开始materialized views可以自动的创建和维护,用于自冶数据库。 物化视图提供了显着提高查询性能的潜力,但需要大量的努力和技能来确定要使用的物化视图。结合了工作负载监控来确定需要哪些物化视图。基于决定,物化视图和物化视图日志被自动创建和维护,无需任何手动交互。对于复杂查询SQL的查询块(QB),MVIEW查询重写技术可以优化此类查询,基于扩展覆盖子表达式算法(ECSE),权衡生成等价、超/子/交/合集的预查询结果。支持分区和非分区基表。支持增量物化视图刷新。Automatic Materialized Views使用对象活动跟踪系统 (OATS) 提供的工作负载信息作为自动决策过程的一部分。

使用DBMS_AUTO_MV 包管理,相关视图有DBA_ACTIVITY_* DBA_AUTO_MV_*

SQL> desc DBMS_AUTO_MV
PROCEDURE CONFIGURE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 PARAMETER_NAME                 VARCHAR2                IN
 PARAMETER_VALUE                VARCHAR2                IN
 ALLOW                          BOOLEAN                 IN     DEFAULT
PROCEDURE CONFIGURE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 PARAMETER_NAME                 VARCHAR2                IN
 PARAMETER_VALUE                NUMBER                  IN
 ALLOW                          BOOLEAN                 IN     DEFAULT
PROCEDURE DROP_AUTO_MVS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 OWNER                          VARCHAR2                IN
 MV_NAME                        VARCHAR2                IN
 ALLOW_RECREATE                 BOOLEAN                 IN     DEFAULT
FUNCTION RECOMMEND RETURNS VARCHAR2
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 STS_OWNER                      VARCHAR2                IN     DEFAULT
 STS_NAME                       VARCHAR2                IN     DEFAULT
 WORKLOAD_START_TIME            TIMESTAMP               IN     DEFAULT
 WORKLOAD_END_TIME              TIMESTAMP               IN     DEFAULT
 AUTOMV_MODE                    VARCHAR2                IN     DEFAULT
PROCEDURE REFRESH
FUNCTION REPORT_ACTIVITY RETURNS CLOB
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 ACTIVITY_START                 TIMESTAMP WITH TIME ZONE IN     DEFAULT
 ACTIVITY_END                   TIMESTAMP WITH TIME ZONE IN     DEFAULT
 TYPE                           VARCHAR2                IN     DEFAULT
 SECTION                        VARCHAR2                IN     DEFAULT
 LEVEL                          VARCHAR2                IN     DEFAULT
FUNCTION REPORT_LAST_ACTIVITY RETURNS CLOB
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 TYPE                           VARCHAR2                IN     DEFAULT
 SECTION                        VARCHAR2                IN     DEFAULT
 LEVEL                          VARCHAR2                IN     DEFAULT


SQL> @d DBA_AUTO_MV
Show data dictionary views and x$ tables matching the expression "DBA_AUTO_MV"...

TABLE_NAME                               COMMENTS
---------------------------------------- --------------------------------------------------------------------------------
DBA_AUTO_MV_ANALYSIS_ACTIONS
DBA_AUTO_MV_ANALYSIS_EXECUTIONS
DBA_AUTO_MV_ANALYSIS_RECOMMENDATIONS
DBA_AUTO_MV_ANALYSIS_REPORT
DBA_AUTO_MV_ANALYSIS_TASK
DBA_AUTO_MV_CONFIG                       set of AUTO MV configuration parameters
DBA_AUTO_MV_MAINT_REPORT
DBA_AUTO_MV_REFRESH_HISTORY
DBA_AUTO_MV_VERIFICATION_REPORT
DBA_AUTO_MV_VERIFICATION_STATUS

10 rows selected.


TABLE_NAME                     COMMENTS
------------------------------ --------------------------------------------------------------------------------
DBA_ACTIVITY_CONFIG            Object Activity Tracking Configuation
DBA_ACTIVITY_MVIEW             Object Activity Tracking for Materialized Views
DBA_ACTIVITY_SNAPSHOT_META     Object Activity Tracking Metadata for Snapshot Intervals
DBA_ACTIVITY_TABLE             Object Activity Tracking for Tables


DBMS_AUTO_MV.RECOMMEND 生成并报告SYS_AUTO_STS过去 24 小时使用的建议。请注意,默认行为是REPORT_ONLY。

自动生成一组正确的物化视图是具有挑战性的任务,这是自动驾驶的一个非常理想的功能数据库。 物化视图的选择必须基于成本,可在实际数据库环境中验证。已全面实施并将部署在云上的 Oracle 自治数据库。另一方面,自动生成物化视图,本身就提出了各种挑战我们可以考虑生成每个语法相关的物化视图,用于基于所有可能的表子集的工作负载查询工作负载查询,但它会爆炸搜索空间,即使一些基于启发式的修剪;任意表子集可以在物化视图定义中引入笛卡尔积。在另一个极端,我们可以为每个查询生成,当在语法上可能,一个候选物化视图与查询的文本完全匹配;这通常会违反存储限制并导致物化视图刷新一个棘手的任务。理想化的目标是生成一个少量的物化视图,大小合理,包含连接和分组的大量预计算,并且可以重写大量当前和未来的工作量查询。这对系统提出了相互矛盾的要求。一种包含大量预计算的物化视图更多有利于它重写的查询,但它通常会重写更少的查询。此外,一个物化视图重写了许多查询往往有大量的分组列,而很少或没有选择谓词,这往往会增加物化根据它包含的行数查看大小。它提出了一种新技术,称为扩展覆盖子表达式算法(ECSE) ,用于自动化物化视图的生成。 ECSE 算法旨在相互冲突的需求之间达成妥协在两个极端之间找到平衡。自动化物化视图项目是更广泛的努力称为 Oracle 自治数据库。 其他该项目的组成部分包括任务管理、 基于机器学习的物化视图的自动刷新等。

选择:

 我们考虑包含多个查询块的查询。每个查询块都可以基于星形、雪花或暴风雪模式。我们系统生成的物化视图可能需要与其他表连接或重写;这种策略比 view-lattice 方法更通用,它假设所有工作负载查询都具有相同的连接模式。在我们的方案中,物化视图一般锚定在一个大的事实表上,可以重写多个查询;它可以包含不会出现在符合重写条件的查询中的预计算(即连接和分组),因为它可能基于参照完整性约束。 ECSE 算法使用成对比较,考虑所有可能的关系——等价、超集、子集、交集和并集——可能存在于给定查询的连接图中,并在适用时利用不变连接属性来提取覆盖子表达式,然后用于生成候选物化视图。新的 ECSE 策略比生成每个的任意子集或子计划更有效 query ,它与报道的子表达式选择、多查询优化和物化视图选择的工作不同。

验证:

在最后一步,我们使用名为 SQL Performance Analyzer 的 Oracle 工具验证推荐的物化视图的性能,该工具接受 SQL 工作负载并允许我们使用各种性能指标来衡量推荐的物化视图对工作负载查询执行的影响。对于验证阶段,优化器重写模块以基于成本的方式决定哪些推荐的物化视图最有利于每个工作负载查询的重写。

刷新:

自动 MV 刷新由后台作业执行,该作业每 15 分钟定期执行一次,持续时间为一小时,具有预定义的资源限制。
Auto-MV 维护使用 Oracle 数据挖掘包中提供的基于神经网络的机器学习算法 [21]。 目标是安排所有陈旧自动 MV 的刷新,以便最大化未来查询重写的次数。 每 24 小时,我们构建一个新的神经网络模型来预测未来的 DML 操作和未来的自动 MV 使用。 用于构建神经网络模型的数据——插入、删除和更新的行数,以及自动 MV 重写的数量——来自 OATS。 建立模型后,将使用五重交叉验证技术 [7] 对其进行验证,该技术将来自 OATS 的数据分成五个相等的块。 为了保证模型的准确性,神经网络算法运行了 5 次,每次使用不同的块作为测试集,其余 4 块作为训练集。

references Automated Generation of Materialized Views in Oracle. PVLDB

打赏

对不起,这篇文章暂时关闭评论。