Oracle官方文档对SQL Access Advisor的描述如下:

SQL Access Advisor, which is a tuning tool that provides advice on improving the performance of a database through partitioning, materialized views, indexes, and materialized view logs.

本文介绍下如何通过DBMS_ADVISOR的quick_tune过程使用SQL Access Advisor,当然,使用EM来执行SQL Access Advisor会更加方便。

  1. 构建测试表T1,T2
  2. 定义调整任务
  3. 创建调优脚本的目录
  4. 把调优脚本内容输出
  5. 查看调优脚本内容

1. 构建测试表T1,T2

```
-- 删除测试表
drop table t1 cascade constraints purge;
drop table t2 cascade constraints purge;
-- 创建测试表
create table t1( id number not null, n number, contents varchar2(4000) );
create table t2( id number not null, t1_id number not null, n number, contents varchar2(4000) );
-- 初始化测试数据
execute dbms_random.seed(0);
insert into t1 select rownum, rownum, dbms_random.string('a',50) from dual connect by level insert into t2 select rownum, rownum, rownum, dbms_random.string('b',60) from dual connect by level <= 100000 order by dbms_random.random;

commit;

-- 查询表数据量

select count(1) from t1;

select count(1) from t2;

-- 查询段大小

select segment_name, BYTES/1024/1024 "MB" from user_segments where segment_name in ('T1','T2');

-- 分析表(必须有统计信息)

analyze table t1 estimate statistics;

analyze table t2 estimate statistics;

测试SQL:

select * from t1, t2 where t1.id = t2.t1_id and t1.n = 19;


<h1 id="2"> 2. 定义调整任务</h1>

begin

dbms_advisor.quick_tune

(dbms_advisor.sqlaccess_advisor,

'zjy_sql_access_task1',

'select * from t1, t2 where t1.id = t2.t1_id and t1.n = 19'

);

end;

/


<h1 id="3"> 3. 创建调优脚本的目录</h1>

create or replace directory tune_jy_scripts as '/tmp';


<h1 id="4"> 4. 把调优脚本内容输出</h1>

begin

dbms_advisor.create_file

(dbms_advisor.get_task_script('zjy_sql_access_task1'),

'TUNE_JY_SCRIPTS',

'zjy_sql_access_task_01.sql'

);

end;

/


<h1 id="5"> 5. 查看调优脚本内容</h1>

more /tmp/zjy_sql_access_task_01.sql

Rem SQL Access Advisor: Version 11.2.0.4.0 - Production

Rem

Rem Username: JINGYU

Rem Task: zjy_sql_access_task1

Rem Execution date:

Rem

CREATE INDEX "JINGYU"."T1_IDX$$_02330000"

ON "JINGYU"."T1"

("N")

COMPUTE STATISTICS;

CREATE INDEX "JINGYU"."T2_IDX$$_02330001"

ON "JINGYU"."T2"

("T1_ID")

COMPUTE STATISTICS;

可以看到这里给出的优化建议,在这里还是很准确的。
即:驱动表T1的限制条件列创建索引;被驱动表的连接条件创建索引。 <h1 id="6"> 6. 删除任务</h1>

exec dbms_sqltune.drop_tuning_task('zjy_sql_access_task1');

SQL Tuning 基础概述09 - SQL Access Advisor的更多相关文章

  1. SQL Tuning 基础概述08 - SQL Tuning Advisor

    SQL调优顾问 SQL Tuning Advisor的使用案例: 1.构建测试表T 2.定义调整任务 3.修改调整任务参数 4.执行调整任务 5.监控调整任务 6.查看调整任务建议 7.删除调整任务 ...

  2. SQL Tuning 基础概述07 - SQL Joins

    N多年之前,刚刚接触SQL的时候,就被多表查询中的各种内连接,外连接,左外连接,右外连接等各式各样的连接弄的晕头转向. 更坑的是书上看到的各种表连接还有两种不同的写法, 比如对于表A,表B的查询 1, ...

  3. SQL Tuning 基础概述10 - 体会索引的常见执行计划

    在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...

  4. SQL Tuning 基础概述10

    在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...

  5. SQL Tuning 基础概述01 - Autotrace的设定

    1.autotrace的设定 SQL> set autotrace Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [ST ...

  6. SQL Tuning 基础概述02 - Explain plan的使用

    1.explain plan的使用 SQL> explain plan for delete from t_jingyu; Explained. SQL> select * from ta ...

  7. SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划

    1.使用sql_trace跟踪执行计划 1.1 当前session跟踪: alter session set sql_trace = true; //开始sql_trace alter session ...

  8. SQL Tuning 基础概述05 - Oracle 索引类型及介绍

    一.B-Tree索引 三大特点:高度较低.存储列值.结构有序 1.1利用索引特性进行优化 外键上建立索引:不但可以提升查询效率,而且可以有效避免锁的竞争(外键所在表delete记录未提交,主键所在表会 ...

  9. SQL Tuning 基础概述06 - 表的关联方式:Nested Loops Join,Merge Sort Join & Hash Join

    nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_n ...

随机推荐

  1. 在发送ajax请求时加时间戳或者随机数去除js缓存

    在发送ajax请求的时候,为了保证每次的都与服务器交互,就要传递一个参数每次都不一样,这里就用了时间戳 大家在系统开发中都可能会在js中用到ajax或者dwr,因为IE的缓存,使得我们在填入相同的值的 ...

  2. web app iphone4 iphone5 iphone6 响应式布局 适配代码

    在网页中,pixel与point比值称为device-pixel-ratio,普通设备都是1,iPhone 4是2,有些Android机型是1.5.] 那么-webkit-min-device-pix ...

  3. shell去除换行和空格2

    #!/bin/bash if [ -f str.txt ] ## 如果str.txt存在,则返回true then strval=$(cat str.txt|awk '{printf "%s ...

  4. js将数字转成大写中文

    <script type="text/javascript"> //主函数 function DX(n) { if (!/^(0|[1-9]\d*)(\.\d+)?$/ ...

  5. WDM驱动和NT驱动之我见

    WDM驱动是NT驱动的进化版.我个人觉得它的主要好处有两个 1.能检测到设备的插入,系统能自动分配设备的硬件信息,如中断号.IO端口.设备物理地址等 2.支持设备的开机状态拔出 之前的NT驱动和硬件关 ...

  6. 如何修改SQL SERVER服务器的端口

    sql server的服务器端口默认是1433,设置服务器端口的位置在这里: 这里的端口,默认是1433,我把它改成了65499 修改端口之后,客户端如何连接? 下面是SSMS的连接方式: 下面是一个 ...

  7. 资深人士剖析微软开源.NET事件:战略重心已经从PC转移到云端

    本文是雷锋网对我的访谈整理的文章,源地址是 http://www.leiphone.com/news/201411/6KaGhD7PDABnvrRf.html 2014年11月13日,微软表示开源.N ...

  8. .Net组件程序设计之远程调用(一)

    .Net组件程序设计之远程调用(一) 1应用程序域 我们知道我们写的C#代码是在操作系统逻辑体系结构中最上层的,然而操作系统本身是不会认识C#代码的,它只认识机器代码.那我们写的程序经过编译后是编译成 ...

  9. IOS SWIFT 启动流程学习

    其实和我们java.c一样通过一个main函数作为入口. main封装在了UIApplicationMain里面.所以后者变成启动入口. 他会扫描Info.plist,找到需要加载的入口storybo ...

  10. Tomcat7基于Redis的Session共享实战一

    本文主要介绍如何使用redis对tomcat7的session进行托管. 1.安装Redisredis安装比较简单,此处略过. 2.配置两个Tomcat在本机上配置两个Tomcat,分别为tomcat ...