300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > oracle access advisor 使用Oracle SQL Access Advisor改善数据库索引与物化视图

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

时间:2021-11-22 19:23:00

相关推荐

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

当针对表集增加物化视图(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数据库性能问题。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。