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. MonkeyRunner 连续两次点击报“Error sending touch event”

    最近用monkeyrunner做自动化测试,遇到连续两次点击,第二次点击就会报错“Error sending touch event”. 具体做法如下: device.touch(234,112, ' ...

  2. Linux Shell编程(10)——引用变量

    当要引用一个变量的值时,一般推荐使用双引号.使用双引号除了变量名前缀($).后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符.用双引号时$仍被当成特殊字符,允许引用一个被双 ...

  3. JavaScript高级程序设计17.pdf

    导航和打开窗口 使用window.open()方法可以导航到一个特定的URL也可以打开一个新的浏览器窗口,接收4个参数:要加载的URL.窗口目标.特性字符串和一个表示新页面是否取代浏览器历史记录中当前 ...

  4. SSH隧道技术----端口转发,socket代理

    原文的原始出处不详,本文也是在复制引用了某篇转载,并做了必要的整理与编辑. 本文的受众 如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写 ...

  5. zoj 3757 Alice and Bob and Cue Sports 月赛A 模拟

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3757 题意:根据所给的台球规则,按照每次的结果计算最终两人的得分 ...

  6. 详解集群内Session高可用的实现原理

    在这个互联网高度发达的时代,许多应用的用户动辄成百上千万,甚至上亿.为了支持海量用户的访问,应用服务器集群这种水平扩展的方式是最常用的.这种情形下,就会涉及到许多单机环境下完全不需要考虑的问题,这其中 ...

  7. hud1856 并查集

    Problem Description Mr Wang wants some boys to help him with a project. Because the project is rathe ...

  8. Linux开启相关端口及查看已开启端口

    防火墙层面:   /sbin/iptables -I INPUT -p tcp --dport 8011 -j ACCEPT #开启8011端口  /etc/rc.d/init.d/iptables ...

  9. oracle REPLACE 函数 介绍

    oracle REPLACE 函数是用另外一个值来替代串中的某个值. 例如,可以用一个匹配数字来替代字母的每一次出现.REPLACE 的格式如下所示: REPLACE ( char, search_s ...

  10. 一个很cool的C#的高性能数学库

    High Performance Math Library for C# and .NET是一个很cool的C#的高性能数学库,3D效果也很不错,下图是首页上的一个例子.他也有一个交互的网页,你可以自 ...