Dav_笔记13:SQL Access Advisor 之 1 Summary

SQL Access Advisor概述

SAA Summary

在调整数据库以实现复杂的数据密集型查询的最佳性能时,物化视图,分区和索引是必不可少的。

SQL Access Advisor通过为给定工作负载推荐适当的物化视图集,物化视图日志,分区和索引,帮助您实现性能目标。

在优化SQL时,理解和使用这些结构至关重要,因为它们可以显著提高数据检索的性能。然而,优点并非没有成本。创建和维护这些对象可能非常耗时,并且空间要求可能很高。特别是,对未分区的基表进行分区是一项复杂的操作,必须仔细规划。

SQL Access Advisor索引建议包括位图,基于函数和B树索引。与其他索引技术相比,位图索引为许多类型的即时查询提供了缩短的响应时间,并降低了存储要求。位图索引最常用于数据仓库中,用于索引唯一或接近唯一的键。 SQL Access Advisor物化视图建议包括快速刷新和完全可刷新的MV,用于一般重写或精确文本匹配重写。

SQL Access Advisor使用TUNE_MVIEW过程,还建议如何优化物化视图,以便可以快速刷新它们并利用常规查询重写。

此外,SQL Access Advisor可以建议对现有的未分区基表进行分区以提高性能。

此外,它可能会建议自己分区的新索引和物化视图。

虽然创建新的分区索引和物化视图与未分区的情况没有区别,但应谨慎执行对现有基表的分区。在表上定义索引,视图,约束或触发器时尤其如此。有关在线执行此任务的基表分区的问题列表,请参阅 Dav_笔记13中的 "脚本包括分区建议时的特殊注意事项"。

您可以使用SQL Access Advisor向导或通过调用DBMS_ADVISOR包从Oracle Enterprise Manager(可从Advisor Central页面访问)运行SQL Access Advisor。

DBMS_ADVISOR包由一组可从任何PL / SQL程序调用的分析和建议函数和过程组成。

图18-1说明了SQL Access Advisor如何为从用户定义的表或SQL缓存获取的给定工作负载建议访问结构。

如果未提供工作负载,则它还可以生成和使用假设工作负载,前提是用户架构包含CREATE DIMENSION关键字定义的维度。

在Enterprise Manager或API中使用SQL Access Advisor,您可以执行以下操作:

■根据收集的,用户提供的或假设的工作负载信息推荐物化视图和索引。

■建议对表,索引和物化视图进行分区。

■标记,更新和删除建议。

此外,您可以使用SQL Access Advisor API执行以下操作:

■使用单个SQL语句执行快速调整。

■演示如何使物化视图快速刷新。

■显示如何更改实例化视图,以便可以进行常规查询重写。

为了提出建议,SQL Access Advisor依赖于有关维度级别列,JOIN KEY列和事实表键列的表和索引基数的结构统计信息。

您可以使用DBMS_STATS包收集精确或估计的统计信息。由于收集统计数据非常耗时且不需要完整的统计准确性,因此通常优先估算统计数据。

如果不收集给定表的统计信息,则引用此表的查询将在工作负载中标记为无效,从而不会对这些查询进行建议。

还建议分析所有现有索引和物化视图。

有关DBMS_STATS包的更多信息,请参见Oracle Database PL / SQL包和类型参考。

使用SQL Access Advisor概述

使用SQL Access Advisor的一种简单方法是调用其向导,该向导可从Advisor Central页面的Enterprise Manager中获得。如果您更喜欢通过DBMS_ADVISOR包使用SQL Access Advisor,那么本节将介绍必须调用这些过程的基本组件和顺序。

本节介绍生成一组建议的四个步骤:

■创建任务

■定义工作负载

■生成建议

■查看并实施建议

步骤1创建任务

顾问程序任务是数据字典中的一个容器,用于存储智能顾问程序分析运行的输入和结果。与推荐操作相关的所有信息(包括结果)都驻留在任务中。

在SQL Access Advisor可以提出建议之前,您必须使用以下任一方法创建任务:

■Oracle Enterprise Manager中的向导或DBMS_ADVISOR.QUICK_TUNE过程,该过程自动创建任务

■DBMS_ADVISOR.CREATE_TASK过程

您可以使用DBMS_ADVISOR.SET_TASK_PARAMETER过程通过定义任务的参数来控制任务的功能。

步骤2定义工作负载

工作负载由一个或多个SQL语句以及完全描述每个语句的统计信息和属性组成。完整工作负载包含来自目标业务应用程序的所有SQL语句。部分工作负载包含SQL语句的子集。不同之处在于,对于完整工作负载,SQL Access Advisor可能会建议删除未使用的物化视图和索引。

没有工作负载,您无法使用SQL Access Advisor。工作负载可能包含各种语句。

SQL Access Advisor根据特定统计信息,业务重要性或两者的组合对条目进行排名,这使得顾问程序可以首先处理最重要的SQL语句。

SQL Access Advisor可能要求在有效工作负载中存在特定属性。虽然顾问可以在缺少负载及属性时时进行分析,但建议的质量可能会较低。例如,SQL Access Advisor要求工作负载包含SQL查询和运行查询的用户,其他属性为可选。但是,如果工作负载还包含I / O和CPU数据,则SQL Access Advisor可以更好地评估语句效率。

数据库将工作负载存储为SQL调优集。您可以使用DBMS_SQLTUNE包访问工作负载,并在许多Advisor任务中共享它。由于工作负载是独立的,因此必须使用DBMS_ADVISOR.ADD_STS_REF过程将其链接到任务。建立此链接后,在所有顾问程序任务消除了对工作负载的依赖之前,您无法删除或修改工作负载。当用户删除父顾问程序任务或使用DBMS_ADVISOR.DELETE_STS_REF过程手动从任务中删除工作负载引用时,将删除工作负载引用。

您可以通过分析维度和约束来从架构创建假设工作负载。

为获得最佳结果,请将工作负载作为SQL调优集提供。 DBMS_SQLTUNE包提供了几个辅助函数,可以从常见工作负载源创建SQL调优集,例如SQL缓存,存储在表中的用户定义工作负载以及假设工作负载。

在生成建议时,您可以对工作负载应用过滤器以限制分析的内容。此限制提供了基于不同工作负载方案生成不同建议集的能力。 SQL Access Advisor参数控制推荐过程和工作负载的自定义。这些参数控制流程的各个方面,例如所需的推荐类型和推荐的命名约定。

要设置这些参数,请使用SET_TASK_PARAMETER过程。参数是持久的,因为它们在任务的生命周期内保持设置。使用SET_TASK_PARAMETER设置参数值时,在您再次调用此过程之前,它不会更改。

步骤3生成建议

在任务存在且工作负载链接到任务并设置了相应的参数后,您可以使用DBMS_ADVISOR.EXECUTE_TASK过程生成建议。这些建议存储在SQL Access Advisor存储库中。

推荐过程产生了若干建议。每个建议指定一个或多个动作。例如,建议可以是创建多个物化视图日志,创建物化视图,然后对其进行分析以收集统计信息。

任务建议的范围可以从简单的建议到需要对一组现有基表进行分区以及实现一组数据库对象(如索引,物化视图和物化视图日志)的复杂解决方案。执行顾问程序任务时,SQL Access Advisor会仔细分析收集的数据和用户调整的任务参数。然后,它形成用户可以查看和实施的结构化建议。

有关生成建议的详细信息,请参阅Dav笔记13系列的"生成建议"。

步骤4查看并实施建议

您可以通过以下任一方式查看SQL Access Advisor中的建议:

■使用目录视图

■使用DBMS_ADVISOR.GET_TASK_SCRIPT过程生成脚本

在Enterprise Manager中,您可以在SQL Access Advisor过程完成后显示建议。

有关使用目录视图查看建议的说明,请参阅本章页的"查看建议"。

请参阅本笔记13系列的"生成SQL脚本"以了解如何创建脚本。

您无需接受所有建议。您可以标记要包含在推荐脚本中的那些。但是,建议使用基表分区时,某些建议取决于其他建议。例如,如果您还没有在索引基表上实现分区建议,则无法实现本地索引。最后一步是实施建议并验证查询性能是否已得到改进。

SQL Access Advisor存储库 :SQL Access Advisor Repository

SQL Access Advisor所需和生成的所有信息都驻留在Advisor存储库中,该存储库是数据库字典的一部分。使用存储库的好处是:

■收集SQL Access Advisor的完整工作负载。

■支持历史数据。

■由服务器管理。

相关推荐
月光水岸New1 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6751 小时前
数据库基础1
数据库
我爱松子鱼1 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo1 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser2 小时前
【SQL】多表查询案例
数据库·sql
Galeoto2 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)3 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231113 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白3 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码3 小时前
【SQL实验】触发器
数据库·笔记·sql