p { margin-bottom: 0.25cm; direction: ltr; color: rgb(0, 0, 0); line-height: 120%; orphans: 2; widows: 2 }
p.western { font-family: "宋体", "SimSun"; font-size: 12pt }
p.cjk { font-family: "宋体", "SimSun"; font-size: 12pt }
p.ctl { font-family: "宋体", "SimSun"; font-size: 12pt }
a:visited { color: rgb(128, 0, 128) }
a.western:visited { }
a.cjk:visited { }
a.ctl:visited { }
a:link { color: rgb(0, 0, 255) }

Oracle
10G
强大的SQL优化工具:SQL
Tuning Advisor

15:05

Oracle
10G推出了强大的SQL优化工具:SQL
Tuning
Advisor,使用该功能必须保证优化器是CBO模式,对SQL进行优化需要执行DBMS_SQLTUNE包,因而需要advisor权限。

举个例子介绍如何优化一条发现问题的语句

--1.创建测试环境

SQL>
show user;

USER
is "SYS"

--授予普通用户advisor的权限

SQL>
grant
advisor to owner;

Grant
succeeded.

SQL>
conn owner/owner

Connected.

SQL>
create
table test1114 as select * from dba_objects;

SQL>
insert
into test1114 select * from dba_objects;

SQL>
set timing on

SQL>
set autot on

SQL>
select
* from test1114;

Elapsed:
00:01:09.81

Execution
Plan

----------------------------------------------------------

Plan
hash value: 3447467757

------------------------------------------------------------------------------

|
Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
Time |

------------------------------------------------------------------------------

|
0 | SELECT STATEMENT | | 110K| 21M| 588 (1)|
00:00:08 |

|
1 | TABLE ACCESS FULL| TEST1114 | 110K| 21M| 588 (1)|
00:00:08 |

------------------------------------------------------------------------------

Note

-----

-
dynamic sampling used for this statement (level=2)

Statistics

----------------------------------------------------------

29
recursive calls

1
db block gets

11646
consistent gets

1080
physical reads

176
redo size

16498937
bytes sent via SQL*Net to client

106046
bytes received via SQL*Net from client

9595
SQL*Net roundtrips to/from client

0
sorts (memory)

0
sorts (disk)

143898
rows processed

--2.创建优化任务

步骤一:
调用函数CREATE_TUNING_TASK来创建优化任务;

步骤二:
调用存储过程EXECUTE_TUNING_TASK执行该任务;

SQL>set
autotrace off

SQL>set
timing off

SQL>
declare

owner_sql
varchar2(30);

sqltext_me
clob;

begin

sqltext_me
:= 'select * from test1114';

--删除优化任务

dbms_sqltune.drop_tuning_task(task_name
=>'tuning_owner_test');

--创建优化任务

owner_sql
:= dbms_sqltune.create_tuning_task
(

sql_text
=> sqltext_me,

user_name
=> 'OWNER',

scope
=> 'comprehensive',

time_limit
=> 60,

task_name
=> 'tuning_owner_test',

description
=> 'task to tune a query on a specified table') ;

--执行优化任务

dbms_sqltune.execute_tuning_task(
task_name => 'tuning_owner_test');

end;

/

PL/SQL
procedure successfully completed.

--3.执行优化任务

调用dbms_sqltune.execute_tuning_task过程来执行前面创建好的优化任务。

SQL>
exec
dbms_sqltune.execute_tuning_task('tuning_owner_test');

PL/SQL
procedure successfully completed.

--4.检查优化任务的状态

-通过查看dba_advisor_task或者suser_advisor_tasks可以检查优化任务的状态

SQL>
SELECT
task_name,status FROM USER_ADVISOR_TASKS WHERE task_name
='tuning_owner_test';

TASK_NAME     
STATUS

------------------------------
-----------

tuning_owner_test   
COMPLETED

--5.查看优化结果

查询dbms_sqltune.report_tning_task函数可以获得优化任务的结果

SQL>
set
long 888888

SQL>
set
serveroutput on size 888888

SQL>
set
lines 100

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

DBMS_SQLTUNE.REPORT_TUNING_TASK('TUNING_OWNER_TEST1500')

--------------------------------------------------------------------------------

GENERAL
INFORMATION SECTION

-------------------------------------------------------------------------------

Tuning
Task Name : tuning_owner_test1500

Tuning
Task Owner : OWNER

Workload
Type : Single SQL Statement

Execution
Count : 2

Current
Execution : EXEC_146

Execution
Type : TUNE SQL

Scope
: COMPREHENSIVE

Time
Limit(seconds): 60

Completion
Status : COMPLETED

Started
at : 11/14/2016 15:00:36

Completed
at : 11/14/2016 15:00:37

-------------------------------------------------------------------------------

Schema
Name: OWNER

SQL
ID : dzrzmbsu9krk8

SQL
Text : select * from test1114

-------------------------------------------------------------------------------

FINDINGS
SECTION (1 finding)

-------------------------------------------------------------------------------

1-
Statistics Finding

---------------------

Table
"OWNER"."TEST1114" was not analyzed.

Recommendation

--------------

-
Consider collecting optimizer statistics for this table.

execute
dbms_stats.gather_table_stats(ownname => 'OWNER', tabname =>

'TEST1114',
estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,

method_opt
=> 'FOR ALL COLUMNS SIZE AUTO');

Rationale

---------

The
optimizer requires up-to-date statistics for the table in order to

select
a good execution plan.

-------------------------------------------------------------------------------

EXPLAIN
PLANS SECTION

-------------------------------------------------------------------------------

1-
Original

-----------

Plan
hash value: 3447467757

------------------------------------------------------------------------------

|
Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
Time |

------------------------------------------------------------------------------

|
0 | SELECT STATEMENT | | 139K| 27M| 588 (1)|
00:00:08 |

|
1 | TABLE ACCESS FULL| TEST1114 | 139K| 27M| 588 (1)|
00:00:08 |

------------------------------------------------------------------------------

-------------------------------------------------------------------------------

分析语句为

execute
dbms_stats.gather_table_stats(ownname => 'OWNER', tabname =>
'TEST1114', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE,
method_opt => 'FOR ALL COLUMNS SIZE AUTO');

--6.删除优化任务

调用dbms_sqltuen.drop_tuning_task删除已经存在的优化任务

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

PL/SQL
procedure successfully completed.

Oracle 10G强大的SQL优化工具:SQL Tuning Advisor的更多相关文章

  1. SQL优化工具 - SQL Server Profiler与数据库引擎优化顾问

    最近项目做到几千个学生分别去人脸识别记录(目前约630000行)中查询最后一次记录,可想而知性能这块是个麻烦.于是乎,GET到了SQL Server Profiler和数据库引擎优化顾问这俩工SHEN ...

  2. 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )

    SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...

  3. [terry笔记]Oracle SQL 优化之sql tuning advisor (STA)

    前言:经常可以碰到优化sql的需求,开发人员直接扔过来一个SQL让DBA优化,然后怎么办? 当然,经验丰富的DBA可以从各种方向下手,有时通过建立正确索引即可获得很好的优化效果,但是那些复杂SQL错综 ...

  4. SQL优化工具

    SQL优化工具 什么是索引? 打个比方,我们在使用MySQL用作查询的时候就好比查字典,索引就好比字典的偏旁部首页.如果没有索引我们查询一个文字就需要一页页的翻,显然这种方式效率很低.如果我们对某一字 ...

  5. SQL优化工具SQLAdvisor使用

    一.简介在数据库运维过程中,优化SQL是业务团队与DBA团队的日常任务.例行SQL优化,不仅可以提升程序性能,还能够降低线上故障的概率. 目前常用的SQL优化方式包括但不限于:业务层优化.SQL逻辑优 ...

  6. 美团SQL优化工具SQLAdvisor

    介绍 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提升程序性能,还能够降低线上故障的概率. 目前常用的 SQL 优化方式包括但不限于:业务层优化.SQL逻 ...

  7. 美团开源 SQL 优化工具 SQLAdvisor

    https://www.oschina.net/news/82725/sqladvisor-opensource https://github.com/Meituan-Dianping/SQLAdvi ...

  8. sql优化工具--美团SQLAdvisor

    美团点评SQL优化工具SQLAdvisor开源 介绍 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提升程序性能,还能够降低线上故障的概率. 目前常用的 S ...

  9. 【SQL优化】SQL优化工具

    SQLAdvisor 是由美团点评公司北京DBA团队开发维护的 SQL 优化工具:输入SQL,输出索引优化建议. 它基于 MySQL 原生词法解析,再结合 SQL 中的 where 条件以及字段选择度 ...

随机推荐

  1. Delphi 在任务栏隐藏程序图标

    Delphi 在任务栏隐藏程序图标 方法一:1.修改工程文件中的“Application.MainFormOnTaskbar := True;”为“Application.MainFormOnTask ...

  2. TinyMCE logo 可视化HTML编辑器 TinyMCE

    TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,支持目前流行的各种浏览器,由JavaScript写成.功能配置灵活简单(两行代码就可以 将编辑器嵌入网页中),支持AJAX.另一特点是加载速度 ...

  3. Android - N级树形结构实现

    目前已经实现3级之内的任意级树形结构展示(如果想增加更多级,需要扩展排序算法),并支持单选和多选(使用不同的适配器). 实现使用的控件:ListView 首先,最重要的应该是数据源的格式,支持树形结构 ...

  4. 标量子查询优化(用group by 代替distinct)

    标量子查询优化 当使用另外一个SELECT 语句来产生结果中的一列的值的时候,这个查询必须只能返回一行一列的值.这种类型的子查询被称为标量子查询 在某些情况下可以进行优化以减少标量子查询的重复执行,但 ...

  5. 利用no_merge优化

    SQL> select a.unit3_code 机构编码, 2 a.unit3_name 机构名称, 3 a.dept1_code 部门编码, 4 a.dept1_name 部门名称, 5 a ...

  6. Linux 关机命令 重启命令

    Linux centos重启命令: 1.reboot2.shutdown -r now 立刻重启(root用户使用)3.shutdown -r 10 过10分钟自动重启(root用户使用)4.shut ...

  7. Quartus中例化工程

    一般的例化工程,需要将要例化的对象的硬件语言放入到当前工程中,比如A要例化B,需要将B的编程文件加入当前工程进来. 还有一种方法不用这么麻烦,A工程用要例化B时,在library添加B的工程路径,就可 ...

  8. HDOJ 1081(ZOJ 1074) To The Max(动态规划)

    Problem Description Given a two-dimensional array of positive and negative integers, a sub-rectangle ...

  9. 怎么把GPUImageFIlter处理过的图像保存成UIImage

    总共有两种方法能够把GPUImage处理过的图片转化成UIImage 方法一:     UIImage *inputImage = [UIImage imageNamed:@"Lambeau ...

  10. 把测试app打包成ipa文件

    我终于把我的程序放到我的touch上了,其实把app放到touch上还有很多办法,这篇教程是主要讲怎么把app注册了,然后打包成一个ipa文件的. 先上官方文档:https://developer.a ...