SQL Tuning 基础概述08 - SQL Tuning Advisor
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的更多相关文章
- SQL Tuning 基础概述09 - SQL Access Advisor
Oracle官方文档对SQL Access Advisor的描述如下: SQL Access Advisor, which is a tuning tool that provides advice ...
- SQL Tuning 基础概述07 - SQL Joins
N多年之前,刚刚接触SQL的时候,就被多表查询中的各种内连接,外连接,左外连接,右外连接等各式各样的连接弄的晕头转向. 更坑的是书上看到的各种表连接还有两种不同的写法, 比如对于表A,表B的查询 1, ...
- SQL Tuning 基础概述10 - 体会索引的常见执行计划
在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...
- SQL Tuning 基础概述10
在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...
- SQL Tuning 基础概述01 - Autotrace的设定
1.autotrace的设定 SQL> set autotrace Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [ST ...
- Oracle Tuning 基础概述01 - Oracle 常见等待事件
对Oracle数据库整体性能的优化,首先要关注的是在有性能问题时数据库排名前几位等待事件是哪些.Oracle等待事件众多,随着版本的升级,数量还在不断增加,可以通过v$event_name查到当前数据 ...
- SQL Tuning 基础概述02 - Explain plan的使用
1.explain plan的使用 SQL> explain plan for delete from t_jingyu; Explained. SQL> select * from ta ...
- SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划
1.使用sql_trace跟踪执行计划 1.1 当前session跟踪: alter session set sql_trace = true; //开始sql_trace alter session ...
- SQL Tuning 基础概述05 - Oracle 索引类型及介绍
一.B-Tree索引 三大特点:高度较低.存储列值.结构有序 1.1利用索引特性进行优化 外键上建立索引:不但可以提升查询效率,而且可以有效避免锁的竞争(外键所在表delete记录未提交,主键所在表会 ...
随机推荐
- C# 注册 Windows 热键
闲扯: 前几日,一个朋友问我如何实现按 F1 键实现粘贴(Ctrl+V)功能,百度了一个方法,发给他,他看不懂(已经是 Boss 的曾经的码农),我就做了个Demo给他参考.今日得空,将 Demo 整 ...
- Kooboo CMS技术文档之五:站点配置管理
站点关系 管理站点间的关系,站点可以有子站点,子站点继承父站点的部分配置数据,同时子站点还可以根据需要,本地化由父站点继承而来的数据.通过继承和本地化,可以让子站点在用最小的改动代价,来完成一个与父站 ...
- 写出易调试的SQL(修订版)
h4 { background: #698B22 !important; color: #FFFFFF; font-family: "微软雅黑", "宋体", ...
- 旺财速啃H5框架之Bootstrap(二)
突然感觉不知道写啥子,脑子里面没水了,可能是因为今晚要出去浪,哈哈~~~提前提醒大家平安夜要回家哦,圣诞节生00000000000这么多蛋....继续 上一篇的已经把bootstrap了解个大概了,接 ...
- WebApi接口 - 如何在应用中调用webapi接口
很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...
- ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存
ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...
- [干货来袭]MSSQL Server on Linux预览版安装教程(先帮大家踩坑)
前言 昨天晚上微软爸爸开了全国开发者大会,会上的内容,我就不多说了,园子里面很多.. 我们唐总裁在今年曾今透漏过SQL Server love Linux,果不其然,这次开发者大会上就推出了MSSQL ...
- 获取打开的Word文档
using Word = Microsoft.Office.Interop.Word; int _getApplicationErrorCount=0; bool _isMsOffice = true ...
- dedecms 后台栏目添加图片
前台调用栏目时需要显示图标,整理一下: 第一步:“系统->SQL命令工具” , 插入sql语句 alter table dede_arctype add typeimg varchar() 第二 ...
- Android Fragment 剖析
1.Fragment如何产生?2.什么是Fragment Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后 ...