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. 使用HttpServletRequestWrapper在filter修改request参数

    javax.servlet.ServletRequest中的 Map<String, String[]> parameterMap = request.getParameterMap(); ...

  2. 利用no_merge优化

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

  3. Android+clipse导入工程提示:invalid project description

    今天遇到一个奇怪的问题.一个android的工程用eclipse导入的时候,提示错误.错误为:invalid project description . details为xxxx project ov ...

  4. linux配置Java(JDK)环境变量

    本帖最后由 zhai 于 2013-11-19 23:00 编辑 1.下载jdk Oracle官方下载地址:http://www.oracle.com/technetwork/java/javase/ ...

  5. su认证失败??? su root 输入命令后显示 "su:Authentication failure"

    原因:安装的时候没有给root设置密码 解决办法如下:

  6. poj 3710 Christmas Game(树上的删边游戏)

    Christmas Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1967   Accepted: 613 Des ...

  7. xgboost在windows上的安装

    xgboost是一个boosting+decision trees的工具包,看微博上各种大牛都说效果很好,于是下载一个,使用了一下,安装步骤如下. 第一步,编译生成xgboost.exe(用于CLI) ...

  8. hdu 4411 arrest 最小费用流

    #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #i ...

  9. 部署war包到Tomcat

    1. 开发给到一个war包,假设叫 a-b-c.war. 2. 打开Tomcat安装路径 ,假设是“D:\Tomcat\apache-tomcat-7.0.68”,然后进入到 webapps文件夹. ...

  10. linux —— shell 编程(文本处理)

    导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...