SQL调优顾问 SQL Tuning Advisor的使用案例:

1.构建测试表T

SQL> conn zjy/zjy
Connected.
SQL> create table t as select * from dba_objects; Table created.
SQL> select count(*) from t; COUNT(*)
----------
653500

2.定义调整任务

对“select owner, object_id, object_name from t where object_id=200000”这个sql定义调整任务:

declare
tune_task_name varchar2(30);
bad_sql_stmt clob;
begin
bad_sql_stmt := '';
tune_task_name := dbms_sqltune.create_tuning_task
(sql_text => bad_sql_stmt,
user_name => 'ZJY',
scope => 'COMPREHENSIVE',
time_limit => 3600,
task_name => 'zjy_sql_tuning_task',
description => 'sql_tuning_advisor for this sql'
);
end;
/
SQL> declare
2 tune_task_name varchar2(30);
3 bad_sql_stmt clob;
4 begin
5 bad_sql_stmt := 'select owner, object_id, object_name from t where object_id=200000';
6 tune_task_name := dbms_sqltune.create_tuning_task
7 (sql_text => bad_sql_stmt,
8 user_name => 'ZJY',
9 scope => 'COMPREHENSIVE',
10 time_limit => 3600,
11 task_name => 'zjy_sql_tuning_task',
12 description => 'sql_tuning_advisor for this sql'
13 );
14 end;
15 / PL/SQL procedure successfully completed.

3.修改调整任务参数

可以修改调整任务的一些参数,比如:

SQL> begin
2 dbms_sqltune.set_tuning_task_parameter
3 (task_name => 'zjy_sql_tuning_task',
4 parameter => 'TIME_LIMIT', value => 1800
5 );
6 end;
7 / PL/SQL procedure successfully completed.

4.执行调整任务

开始执行调整任务:

begin
dbms_sqltune.execute_tuning_task
(task_name => 'zjy_sql_tuning_task');
end;
/
SQL> begin
2 dbms_sqltune.execute_tuning_task
3 (task_name => 'zjy_sql_tuning_task');
4 end;
5 / PL/SQL procedure successfully completed.

5.监控调整任务

监控调整任务的执行状态:

select task_name, status, sofar, totalwork
from dba_advisor_tasks
join v$advisor_progress using(task_id)
where task_name = 'zjy_sql_tuning_task';
SQL> select task_name, status, sofar, totalwork
2 from dba_advisor_tasks
3 join v$advisor_progress using(task_id)
4 where task_name = 'zjy_sql_tuning_task'; TASK_NAME STATUS SOFAR TOTALWORK
------------------------------ ----------- ---------- ----------
zjy_sql_tuning_task COMPLETED 1 1

6.查看调整任务建议

查看调整任务最终给出的建议:

SQL> select dbms_sqltune.report_tuning_task('zjy_sql_tuning_task') from dual;

DBMS_SQLTUNE.REPORT_TUNING_TASK('ZJY_SQL_TUNING_TASK')
-------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name : zjy_sql_tuning_task
Tuning Task Owner : ZJY
Workload Type : Single SQL Statement
Scope : COMPREHENSIVE
Time Limit(seconds): 1800
Completion Status : COMPLETED
Started at : 01/23/2015 14:58:40
Completed at : 01/23/2015 14:58:58 -------------------------------------------------------------------------------
Schema Name: ZJY
SQL ID : dmw0nx6g0b6h7
SQL Text : select owner, object_id, object_name from t where
object_id=200000 -------------------------------------------------------------------------------
FINDINGS SECTION (2 findings)
------------------------------------------------------------------------------- 1- Statistics Finding
---------------------
尚未分析表 "ZJY"."T"。 Recommendation
--------------
- 考虑收集此表的优化程序统计信息。
execute dbms_stats.gather_table_stats(ownname => 'ZJY', tabname => 'T',
estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt =>
'FOR ALL COLUMNS SIZE AUTO'); Rationale
---------
为了选择好的执行计划, 优化程序需要此表的最新统计信息。 2- Index Finding (see explain plans section below)
--------------------------------------------------
通过创建一个或多个索引可以改进此语句的执行计划。 Recommendation (estimated benefit: 99.86%)
------------------------------------------
- 考虑运行可以改进物理方案设计的访问指导或者创建推荐的索引。
create index ZJY.IDX$$_3EC90001 on ZJY.T("OBJECT_ID","OWNER","OBJECT_NAME")
; Rationale
---------
创建推荐的索引可以显著地改进此语句的执行计划。但是, 使用典型的 SQL 工作量运行 "访问指导"
可能比单个语句更可取。通过这种方法可以获得全面的索引建议案, 包括计算索引维护的开销和附加的空间消耗。 -------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
------------------------------------------------------------------------------- 1- Original
-----------
Plan hash value: 1601196873 --------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 124 | 11904 | 3059 (1)| 00:00:37 |
|* 1 | TABLE ACCESS FULL| T | 124 | 11904 | 3059 (1)| 00:00:37 |
-------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter("OBJECT_ID"=200000) 2- Using New Indices
--------------------
Plan hash value: 3141638344 -----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 96 | 4 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| IDX$$_3EC90001 | 1 | 96 | 4 (0)| 00:00:01 |
----------------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 1 - access("OBJECT_ID"=200000) -------------------------------------------------------------------------------

7.删除调整任务

删除调整任务:

SQL> exec dbms_sqltune.drop_tuning_task('zjy_sql_tuning_task') ;

PL/SQL procedure successfully completed.

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

  1. SQL Tuning 基础概述09 - SQL Access Advisor

    Oracle官方文档对SQL Access Advisor的描述如下: SQL Access Advisor, which is a tuning tool that provides advice ...

  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. Oracle Tuning 基础概述01 - Oracle 常见等待事件

    对Oracle数据库整体性能的优化,首先要关注的是在有性能问题时数据库排名前几位等待事件是哪些.Oracle等待事件众多,随着版本的升级,数量还在不断增加,可以通过v$event_name查到当前数据 ...

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

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

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

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

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

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

随机推荐

  1. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  2. .NET Core 系列5 :使用 Nuget打包类库

    NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全使用Nuget 管理组件之间的依赖关系, ...

  3. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  4. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

  5. 当忘记mysql数据库密码时如何进行修改

    因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...

  6. 关于python的bottle框架跨域请求报错问题的处理

    在用python的bottle框架开发时,前端使用ajax跨域访问时,js代码老是进入不了success,而是进入了error,而返回的状态却是200.url直接在浏览器访问也是正常的,浏览器按F12 ...

  7. 从零开始编写自己的C#框架(25)——网站部署

    导航 1.关掉访问保护 2.发布网站 3.复制网站到服务器 4.添加新网站 5.设置网站访问权限 6.设置文件夹访问权限 7.控制可更新文件夹执行权限 8.设置“应用程序池”.net版本与模式 9.附 ...

  8. 第一个移动前端开源项目-dailog

    你还在为手机上没有忙碌光标而发愁吗?你还在抱怨弹出框组件要依赖zepto/jqery吗?你还在纠结是否要自己写一套还是去网上寻找成现成的UI组件吗?YouA为你轻松解决所有烦恼.YouA是我为移动前端 ...

  9. 敏捷转型历程 - Sprint3 回顾会

    我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...

  10. Windows更新清理工具 (winsxs 清理工具)

    Windows 更新清理工具是一款效果非常显著的Windows7.Windows8操作系统清理优化工具!经常安装系统的朋友相比有所体会,刚刚安装完成的Win7.Win8其实占的空间并不大,去掉页面文件 ...