SQL Tuning Advisor使用实例
来源:互联网 发布:红中麻将源码教程 编辑:程序博客网 时间:2024/04/29 09:31
在oracle10g之前,想要优化一个sql语句是比较麻烦,但是在oracle10g这个版本推出的SQLTuning Advisor这个工具,能大大减少sql调优的工作量,不过要想使用SQL TuningAdvisor,一定要保证你的优化器是CBO模式。
1.首先需要创建一个用于调优的用户bamboo,并授予advisor给创建的用户
SQL> create user bamboo identified by bamboo;
User created.
SQL> grant connect,resource tobamboo;
Grant succeeded.
SQL> grant advisor to bamboo;
Grant succeeded.
2.创建用户做测试的2张表,大表里面插入500万条数据,小表里面插入10万条数据,其创建方法如下
SQL> create table bigtable (id number(10),namevarchar2(100));
Table created.
SQL> begin
PL/SQL procedure successfully completed.
SQL> commit;
SQL> create table smalltable (idnumber(10),name varchar2(100));
Table created.
SQL> begin
PL/SQL procedure successfully completed.
SQL> commit;
3.然后对bigtable和smalltable做一个等连接查询,然后跟踪其执行计划
SQL> select a.id,a.name,b.id,b.name from bigtablea,smalltable b where a.id=b.id and a.id=40000;
---------- -------------------- -------------------------------------
Execution Plan
----------------------------------------------------------
Plan hash value: 1703851322
---------------------------------------------------------------------------------
| Id
---------------------------------------------------------------------------------
|
|*
|*
|*
---------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
Note
-----
Statistics
----------------------------------------------------------
熟悉执行计划的就可以看出,这个sql执行是很慢的,2个表都做的是全表扫描,并且其物理读是11469,按照优化的经验,给2个表的id创建索引,减少查询时候的物理读,下面我们就看看通过优化器,oracle能我们什么样的建议呢?
4.下面就通过DBMS_SQLTUNE包的CREATE_TUNING_TASK来创建一个优化任务,然后通过DBMS_SQLTUNE.EXECUTE_TUNING_TASK来执行调优任务,生成调优建议
SQL> DECLARE
10
11
12
13
14
15
16
5.执行的过程中,也可以通过user_advisor_tasks或者dba_advisor_tasks来查看调优任务执行的状况
SQL> select task_name,ADVISOR_NAME,STATUSfrom user_advisor_tasks;
TASK_NAME
------------------ -------------------------------------------------------------------------
test_sql_tuning_task1
如果status是EXECUTING,则表示任务正在执行,如果为COMPLETED,则任务已经执行完毕
6.通过调用dbms_sqltune.report_tuning_task可以查询调优的结果,不过在查询结果之前,得设置sqlplus的环境,如果不设置,则查询的结果出不来
SQL> set long 999999
SQL> set LONGCHUNKSIZE 999999
SQL> set serveroutput on size 999999
SQL> set linesize 200
SQL> selectdbms_sqltune.report_tuning_task('test_sql_tuning_task1') fromdual;
SQL> selectdbms_sqltune.report_tuning_task('test_sql_tuning_task1') fromdual;
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
---------------------------------------------------------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning TaskName
Tuning TaskOwner
Scope
TimeLimit(seconds)
CompletionStatus
Startedat
Completedat
Number of StatisticFindings
Number of IndexFindings
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
----------------------------------------------------------------------------------------------------------------------------------
Schema Name: SCOTT
SQLID
SQL Text
-------------------------------------------------------------------------------
FINDINGS SECTION (3 findings)
-------------------------------------------------------------------------------
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
----------------------------------------------------------------------------------------------------------------------------------
1- Statistics Finding
---------------------
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
----------------------------------------------------------------------------------------------------------------------------------
2- Statistics Finding
---------------------
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
----------------------------------------------------------------------------------------------------------------------------------
3- Index Finding (see explain plans sectionbelow)
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
---------------------------------------------------------------------------------------------------------------------------------
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
----------------------------------------------------------------------------------------------------------------------------------
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
----------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
-------------------------------------------------------------------------------
1- Original
-----------
Plan hash value: 1703851322
---------------------------------------------------------------------------------
| Id
---------------------------------------------------------------------------------
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
----------------------------------------------------------------------------------------------------------------------------------
|
|*
|*
|*
---------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
---------------------------------------------------------------------------------------------------------------------------------
2- Using New Indices
--------------------
Plan hash value: 3720188830
------------------------------------------------------------------------------------------------
| Id
------------------------------------------------------------------------------------------------
|
|
DBMS_SQLTUNE.REPORT_TUNING_TASK('TEST_SQL_TUNING_TASK1')
---------------------------------------------------------------------------------------------------------------------------------
|
|
|*
|*
------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
(1)SCOTT.SMALLTABLE表没有做分析,需要做一下表结构的分析,并且给出一个分析的建议,如下所示
(2)SCOTT.BIGTABLE表没有做分析,需要做一下表结构的分析,并且给出一个分析的建议,如下所示
(3)oracle建议我们在表SCOTT.SMALLTABLE,SCOTT.BIGTABLE的id列创建一个bitree索引,给的建议如下
通过以上查看oracle的调优顾问给的建议,基本和我们在前面给出的调优方案是一致,因此当我们给一个大的SQL做优化的时候,可以先使用oracle调优顾问,得到一些调优方案,然后根据实际情况做一些调整就可以。
-------------------
Execution Plan
----------------------------------------------------------
Plan hash value: 777647921
-------------------------------------------------------------------------------------------------
| Id
-------------------------------------------------------------------------------------------------
|
|
|
|
|*
|*
-------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
Statistics
----------------------------------------------------------
转自:http://www.cnblogs.com/einyboy/archive/2012/08/14/2637659.html
- SQL Tuning Advisor使用实例
- 关于 SQL Tuning Advisor
- SQL Tuning Advisor使用实例
- SQL Tuning Advisor使用实例
- SQL Tuning Advisor使用实例
- sql tunning advisor的使用
- SQL Tuning Advisor
- Sql Tuning Advisor
- Automatic SQL Tuning Advisor
- Oracle SQL Tuning Advisor
- SQL Tuning Advisor简介
- SQL访问顾问(SQL Access Advisor)
- 如何用 SQL Tuning&nbsp…
- 如何用 SQL Tuning&nbsp…
- sql access advisor,SQL Tuning Advisor
- SQL优化器(SQL Tuning A…
- 使用SQL tuning advisor(STA)自动优化SQL
- 使用DBMS_SQLTUNE的Sql Tuning Advisor优化SQL
- Oracle AWR 介绍
- Oracle AWR
- oracle ADDM
- Oracle Alerts 与…
- 如何用 SQL Tuning&nbsp…
- SQL Tuning Advisor使用实例
- SQL优化器(SQL Tuning A…
- 使用version做SVN管理.a无法上传的问题解决方案
- SQL访问顾问(SQL Access Advisor)
- SGA_MAX_SIZE与SGA_TARGET
- FAST_START_MTTR_TARGET
- oracle rpad()函数
- oracle中LTRIM的用法
- ORACLE OMF介绍