使用Oracle SQL Access Advisor改善数据库索引与物化视图

日期: 2013-10-30 作者:Matthew Morris翻译:孙瑞 来源:TechTarget中国 英文

当针对表集增加物化视图(materialized view)和索引时,理论上这些表的查询性能会得到改善。但事实上并不一定能达到理想的状态,因此Oracle推出了SQL Access Advisor工具,用来确保高效地访问到想要的数据。 在不合适的列中创建索引,或者一个物化视图的不良设计都会造成对性能的影响。而且无论数据库性能是否得到提升,在进行上述操作的时候都会产生额外的开销,包括存储空间以及维护工作的时间。

当DBA向数据库添加这些对象时,肯定希望得到的好处要大过开销的。 SQL Access Advisor会提供关于物化视图、物化视图日志以及特定负载索引的相关建议。作为分析的一部分,SQL ……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

当针对表集增加物化视图(materialized view)和索引时,理论上这些表的查询性能会得到改善。但事实上并不一定能达到理想的状态,因此Oracle推出了SQL Access Advisor具,用来确保高效地访问到想要的数据。

在不合适的列中创建索引,或者一个物化视图的不良设计都会造成对性能的影响。而且无论数据库性能是否得到提升,在进行上述操作的时候都会产生额外的开销,包括存储空间以及维护工作的时间。当DBA向数据库添加这些对象时,肯定希望得到的好处要大过开销的。

SQL Access Advisor会提供关于物化视图、物化视图日志以及特定负载索引的相关建议。作为分析的一部分,SQL Access Advisor会在存储空间占用以及查询性能之间进行权衡,找到最佳平衡点。它提供的建议包括一个或多个基础表是否适合进行分区,它将把所有的独立分区操作放到一个建议当中。而其他的建议则会在这一分区操作基础上提供。索引和物化视图建议在很大程度上取决于基础表的分区。

SQL Access Advisor API可以实现以下功能:

  • 根据收集到的,用户提供的或者假设的工作负载信息提供物化视图以及索引创建的相关建议
  • 提供对表分区,索引以及物化视图的相关建议
  • 对这些建议进行标记,更新或删除
  • 使用单一SQL语句进行快速调优
  • 提供如何让物化视图快速可刷新的建议
  • 提供如何更改物化视图让查询可以重写的建议

提供的建议依赖于表和索引中维度列,键关联列以及事实表键列基数的结构统计数据。如果特定表的这些统计数据缺失,那么SQL Access Advisor将对引用这些表的查询标记为无效,因此它不会对这些查询提供建议。你还需要确保分析的是已有的索引和物化视图。

SQL Access Advisor有两种运行模式:解决问题评估问题。默认的是解决问题模式。在这个模式下,SQL Access Advisor将通过创建新的对象来试着解决访问方法的问题。而在评估问题模式下,SQL Access Advisor只会对特定工作负载使用的访问路径提供建议。解决问题模式运行后会建议创建新的索引,而评估问题场景下只会生成一系列建议,比如保留现有索引等。评估模式在决定使用哪些索引和物化视图方面非常有用。

SQL Access Advisor任务将定义你想要分析的事务,以及分析结果的存放位置。它可以创建任意数目的特定任务,所有都基于相同的Advisor任务模式,并共享统一的库。你可以使用DBMS_ADVISOR 包中CREATE_TASK来创建任务:

VARIABLE task_id NUMBER;

VARIABLE task_name VARCHAR2(255);

EXECUTE :task_name := 'MYTASK';

EXECUTE DBMS_ADVISOR.CREATE_TASK

('SQL Access Advisor', :task_id, :task_name);

SQL Access Advisor的输入负载是SQL Tuning Set.。使用它的一个重要好处是它可以被任意的Advisor任务引用。SQL Tuning Set负载使用DBMS_SQLTUNE来创建,可以通过DBMS_ADVISOR 包来讲SQL Workload对象将导入一个SQL Tuning Set:

EXECUTE DBMS_ADVISOR.COPY_SQLWKLD_TO_STS('MYWORKLOAD','MYSTS','NEW');

要让Advisor生成建议,你需要将任务连接到SQL Tuning Set。使用各自名称来将任务连接到Tuning Set当中,你可以使用ADD_STS_REF创建连接。当定义好连接之后,SQL Tuning Set被保护,无法再进行删除和更新。

EXECUTE DBMS_ADVISOR.ADD_STS_REF('MYTASK', null, 'MYWORKLOAD');

在删除任务或者删除SQL Tuning Set工作负载之前,必须删除全部已有的连接。通过DELETE_STS_REF就可以完成,如下所示:

EXECUTE DBMS_ADVISOR.DELETE_STS_REF('MYTASK', null, 'MYWORKLOAD');

通过EXECUTE_TASK来生成建议。在任务完成之后,DBA_ADVISOR_LOG表会展示执行状态,以及生成了多少建议和动作。EXECUTE_TASK是一个同步操作,因此在操作完成或者中断之前,操作权不会返回用户。你可以在DBA_ADVISOR_RECOMMENDATIONS中根据任务名称查询相应建议,或者在DBA_ADVISOR_ACTIONS中查询相应的动作。

EXECUTE DBMS_ADVISOR.EXECUTE_TASK('MYTASK');

SQL Access Advisor在SQL性能调优方面能起到非常大的作用。理想状态中,你需要定期找到数据库中开销比较高的SQL语句,然后把它们放到SQL Tuning Set(STS)中进行检查。再通过SQL Access Advisor和SQL Tuning Advisor工具对进行评估,它们都会给出相应的建议。这些建议可以输入到SQL Performance Analyzer中,你可以看看它们造成的影响有多大。这些工具组合是DBA需要了解和熟练掌握的,可以极大解决Oracle数据库性能问题。

翻译

孙瑞
孙瑞

相关推荐