Oracle智能之SQL诊断:SQL Tuning Advisor推荐执行计划

编辑手记:在前一段,一篇智能数据库优化的论文引起广泛的关注,其实在 Oracle 数据库中,已经引入了大量自动化和智能化的方法去进行自动调节,包括在 SQL 层面的智能诊断分析和建议。

张大朋(Lunar)Oracle 资深技术专家 Lunar 拥有超过十年的 ORACLE SUPPORT 从业经验,曾经服务于ORACLE ACS部门,现就职于 ORACLE Sales Consultant 部门,负责的产品主要是 Exadata,Golden Gate,Database 等。

本文的测试目的,起因一个问题:当有hint时,并且hint跟需要绑定的执行计划有冲突,谁的优先级高?

在这个演示过程中,使用SQL Tuning Advisor来进行辅助,在 Oracle 数据库中,SQL Tuning Advisor 的智能化程度可能超过很多人的想象,应该多学习和使用。

首先创建一个测试用例:

LUNAR@lunardb>create table lunartest1 (n number ); Table created. Elapsed: 00:00:00.08 LUNAR@lunardb>begin 2 for i in 1 .. 10000 loop 3 insert into lunartest1 values(i); 4 commit; 5 end loop; 6 end; 7 / PL/SQL procedure successfully completed. LUNAR@lunardb>create index idx_lunartest1_n on lunartest1(n); Index created. Elapsed: 00:00:00.04

执行查询,我们看到sql按照hint的方式没有使用索引,而是全表扫描,这是我们预期的结果:

下面我们运行SQL Tuning Advisor来生成建议报告:

查看生成的报告内容:

这里我们看到SQL Tuning Advisor提示了两个建议:

1.收集统计信息:execute dbms_stats.gather_table_stats(ownname => 'LUNAR', tabname =>'LUNARTEST1', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt => 'FOR ALL COLUMNS SIZE AUTO');2,提供了一个执行计划建议:execute dbms_sqltune.accept_sql_profile(task_name =>'Lunar_tunning_bjgduva68mbqm', task_owner => 'LUNAR', replace =>TRUE);

并且给出了这个执行计划和原始执行计划的对比,可以看到 执行效率提高了89%以上,逻辑读从23降低为2,减少了91.3%。 我们按照建议执行以上的两条命令。首先收集统计信息,再接受建议的执行计划,现在看看 SQL 执行的情况:

这里我们看到,这个执行计划中已经使用了索引,并且逻辑读从49降低为14。

现在我们查看一下这个SQL Profile的OUTLINE:

这里我们看到该SQP Profile中提供了详细的表和列的统计信息 并且有“IGNORE_OPTIM_EMBEDDED_HINTS”,也就是忽略嵌入到SQL中的hint 。

结论:虽然这个SQL的hint中指定了no index,即不使用索引,但是SQL语句仍然按照SYS_SQLPROF_015236655fb80000指定的profile使用了index。 这说明dbms_sqltune.accept_sql_profile方式绑定的执行计划优先级高于hint指定是否使用索引的方式。


原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-06-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构师之路

秒杀系统架构优化思路

一、秒杀业务为什么难做 1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息); 2)微博系统,每个人读你关注的人的数据,一个人读多...

37710
来自专栏MongoDB中文社区

9月.精华文章推荐

1.《GDPR: Impact to Your Data Management Landscape:Part 3 》

842
来自专栏Web 开发

大内存的机子的新玩具-FancyCache

自从这个学期开始,DDR3内存进入了白菜价时期,4G 1333笔记本的都只需要130RMB左右,果断入手两条

580
来自专栏Java架构

几种常见的微服务架构方案,2018年是否还一如既往的火

1725
来自专栏美团技术团队

美团点评数据库高可用架构的演进与设想

本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新。同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进...

34015
来自专栏java思维导图

微服务设计我们需要考虑哪些要点?

作者:刘超,毕业于上海交通大学,15年云计算领域研发及架构经验,先后在EMC,CCTV证券资讯频道,HP,华为,网易从事云计算和大数据架构工作。

840
来自专栏码神联盟

【原创】互联网常见架构模式 之 nginx负载均衡

一:什么是Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。...

3777
来自专栏pangguoming

美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进

本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新。同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进...

47610
来自专栏IT笔记

JavaWeb项目架构之Redis分布式日志队列

架构、分布式、日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Redis做消息队列罢了。

47411
来自专栏james大数据架构

各大厂分布式链路跟踪系统架构对比

4102

扫描关注云+社区