SQL访问顾问(SQL Access Advisor)之一: 概要

来源:互联网 发布:崔杼杀史官 知乎 编辑:程序博客网 时间:2024/04/27 12:13

当为复杂的、数据密集的查询进行最优性能调试数据库时,物化视图和索引(materialized views and indexes)是必要的。SQL访问顾问通过为一个给定的工作量推荐的一个关于物化视图、物化视图日志和索引的适当集合来帮助你达到优化目标。当优化SQL时,理解和使用这些结构是必要的,因为它们在数据读取方面获得重大性能的提升。但是,有得必有失。创建和维护这些对象需要花费时间,空间的要求也是很重要的。

 

SQL访问顾问推荐使用位图索引、基于函数的索引和B-树索引。对于很多类型的专用查询来说,位图索引可以缩短相应时间,而且相对其他索引技术,它可以减少需要的存储空间。B-树索引在数据仓库中最常用,主要用来索引唯一或接近唯一的关键字。


SQL访问顾问的另一个组件也建议如何优化物化视图,以便它们可以快速更新和利用一般查询重写(rewrite)。

 

SQL访问顾问可以从Oracle企业管理器(Enterprise Manager)(从顾问中心(Advisor Central)页访问)中使用SQL访问顾问向导(SQL Access Advisor Wizard)运行或通过DBMS_ADVISOR包调用。DBMS_ADVISOR包由一组分析和建议的函数与过程的集合组成,这些函数和过程可以由任何PL/SQL程序调用。下图显示了SQL访问顾问如何对一个给定的工作量建议物化视图的,这些工作量是从用户定义的表或SQL缓存中得到的。如果没有提供工作量,它可以产生并使用一个理想的工作量。

This figure illustrates how materialized views work with the SQL Access Advisor:

 使用SQL访问顾问向导或API,你可以做以下事情:
1. 建议基于收集到的或理想工作量信息的物化视图和索引。
2. 管理工作量。
3. 标记、更新和删除建议。


除此之外,你可以用SQL访问顾问API来做以下事情:
1. 执行一个使用单个SQL语句的快速优化。
2. 展示如何使物化视图快速刷新。
3. 展示如何改变一个物化视图来使得一般查询的重写成为可能。

 

如果你收集到关于表和索引的基数,以及每个维度层次字段、JOIN KEY字段和时间表的关键字字段的不同值的基数,那么SQL访问顾问的建议更具有意义。你可以通过用DBMS_STATS包收集精确或估计的统计信息来做到这些事情。因为收集统计信息是要花费时间的,而且也不需要极度精确的统计信息,所以一般更愿意使用估计的统计信息。没有这些统计信息的话,任何引用该表的查询会在工作量中标记为无效的,从而导致对这些查询没有任何建议。同时,它也建议所有存在的索引和物化视图都已经被分析过。

 

使用SQL访问顾问的概况
使用SQL访问顾问的最简单的方式是调用它的向导,这可以在Oracle企业管理器的顾问中心页面找到。如果你更愿意通过DBMS_ADVISOR包来使用SQL访问顾问的话,下面会介绍它的基本组件和必须调用的不同的过程。

 

第一步 创建一个任务
在作出任何建议之间,必须创建一个任务。这个任务很重要,因为它保存了关于建议程序的所有信息,包括建议程序的结果。如果你使用Oracle企业管理器的向导或DBMS_ADVISOR.QUICK_TUNE过程,任务会自动创建。其他情况,你必须使用DBMS_ADVISOR.CREATE_TASK过程来创建一个任务。
你可以用DBMS_ADVISOR.SET_TASK_PARAMETER过程来定义参数,从而控制任务要做什么。

 

第二部 定义工作量(workload)
工作量是调用SQL访问顾问的主要输入之一,它由一个或多个SQL语句构成,加上完全描述每个语句的各种

统计信息和属性。如果工作量包含了一个目标商业应用的所有SQL语句,那么这个工作量被认为是一个全

工作量;如果工作量包含所有SQL语句的一个子集,那么它就被认为是部分工作量。全工作量和部分工作量之间的不同是全工作量下,如果SQL访问顾问发现已存在的物化视图和索引并没有有效地使用,那么它会建议删除它们。

 

典型地,SQL访问顾问使用工作量作为所有分析的基础。尽管工作量包含非常广泛的语句,它还是仔细地根据特定统计信息,业务重要性,或统计信息和业务重要性的组合进行分等级。这个等级是很关键的,它可以使SQL访问顾问先处理最重要的SQL语句,然后是那些业务影响更小的语句。