暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

张大朋 2017-06-27
677

编辑手记:在前一段,一篇智能数据库优化的论文引起广泛的关注,其实在 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'
);
文章转载自张大朋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论