Oracle10g SQL tune adviser简单介绍【转自ITPUB zhouwf0726】

Oracle10g SQL tune adviser

Oracle10g SQL tune adviser简单介绍

        本文简单介绍下SQL Tuning
Adviser的布置使用办法与一部分息息相关知识点,如果了解SQL Tuning
Adviser详细信息,参看Oracle联机文档。本文对分析结果尚未详细分析。

同、自动SQL Tuning简单介绍:

1、优化模式:
       
        10G增强的优化模式发生三三两两栽:
       
        a、Normal mode
       
               
在平常优化模式下,优化器编译sql然后有执行计划。普通优化模式下优化器能够快速的呢sql语句产生有效的履行计划。

        b、Tuning mode

                在tuning
mode模式下,优化器将费额外的时刻检查一个平淡无奇模式下发生的尽计划是不是可以优化。优化器的出口结果用不仅是有一个实行计划,
               
而以尽同样文山会海的动作,在拖欠模式下优化器也许化肥几分钟去调动一个讲话。每次一个sql语句被硬解析后拿当活动调整优化及消费还多之时间和资源。
                sql自动调整优化更适用于产生复杂sql或者high-load
sql的系统(例如addm中标记否高负载的sql就非常适合作为sql自动调整的目标)。
               
               
2、        SQL Tuning类型

        Automatic SQL Tuning包含四栽档次的辨析:

                a、Statistics Analysis
                b、SQL Profiling
                c、Access Path Analysis
                d、SQL Structure Analysis
       
二、SQL Tuning Adviser:
               
               
1、授予用户相应权限:
               
        CONN sys/password AS SYSDBA
        GRANT ADVISOR TO TEST;
        CONN TEST/TEST

2、创建Tuning任务:

        可以经以下方法开创Tuning任务:
       
                a、Automatic Workload Repository (AWR)
                b、the cursor cache
                c、SQL tuning set
                d、specified manually
               

                SET SERVEROUTPUT ON

                –a、通过AWR设置Tuning任务.
               
                        SQL> conn /as sysdba
                        已连接。
                       
                        –查看AWR的SNAPSHOT信息:
                       
                        SQL> SELECT max(snap_id) FROM
WRM$_SNAPSHOT;
                       
                        MAX(SNAP_ID)
                        ————
                                 201
       
                        –查看SNAP间隔:
                       
                        SQL> select snap_interval, retention from
dba_hist_wr_control;
                       
                        SNAP_INTERVAL                  RETENTION

                        ——————————

                        +00000 01:00:00.0              +00007
00:00:00.0
                       
                       
–我们可以手工缩短AWR采样时间距离(加快测试速度,本利采用手工执行创建SNAPSHOT的点子):
                       
                        begin
                          
dbms_workload_repository.modify_snapshot_settings (
                              interval => 10,
                              retention => 10*24*60
                           );
                        end;
       
                        SQL> conn test/test
                        已连接。
                       
                        –执行对象SQL:
                       
                        SQL> select /*We will trace this sql*/
name,addr,insertdata from (select name,ad
                        dr,insertdata,rank() over(partition by name,addr
order by insertdata desc) rn fr
                        om t ) where rn = 1;
                       
                        NAME       ADDR                 INSERTDATA

                        ———- ——————–

                        王         上海                 19-12-2006
10:09:33
                        王1        上海                 16-12-2006
10:11:15
                        王2        上海                 16-12-2006
10:11:15
                        张         北京                 19-12-2006
10:08:42
                       
                        –查找SQL_ID:
                       
                        SQL> select sql_id,executions from v$sqlarea
where lower(sql_text) like ‘%we wil
                        l trace this sql%’;
                       
                        SQL_ID        EXECUTIONS
                        ————- ———-
                        8zu31x4adn76f          1
                        1k659753fzcxn          1
                       
                        SQL> /
                       
                        SQL_ID        EXECUTIONS
                        ————- ———-
                        8zu31x4adn76f          2
                        1k659753fzcxn          1   –我们拿分析该SQL
                       
                        SQL> select sql_id from DBA_HIST_SQLSTAT
where sql_id=’1k659753fzcxn’;
                       
                        未选择定行
                       
                        –手工创建新的AWR SNAPSHOT:
                       
                        SQL> execute
dbms_workload_repository.create_snapshot;
                       
                        PL/SQL 过程都成做到。
                       
                        SQL> select sql_id from DBA_HIST_SQLSTAT
where sql_id=’1k659753fzcxn’;
                       
                        SQL_ID
                        ————-
                        1k659753fzcxn
                       
                        –创建Tuning task:
       
                        SQL> DECLARE
                          2             
 l_sql_tune_task_id  VARCHAR2(100);
                          3             BEGIN
                          4               l_sql_tune_task_id :=
DBMS_SQLTUNE.create_tuning_task (
                          5                                     
 begin_snap  => 201,
                          6                                     
 end_snap    => 202,
                          7                                     
 sql_id      => ‘1k659753fzcxn’,
                          8                                       scope 
     => DBMS_SQLTUNE.scope_comprehensive,
                          9                                     
 time_limit  => 60,
                         10                                     
 task_name   => ‘1k659753fzcxn_awr_tuning_task’,
                         11                                     
 description => ‘Tuning task for statement 1k659753fzcxn in AWR.’);
                         12             
 DBMS_OUTPUT.put_line(‘l_sql_tune_task_id: ‘ ||
l_sql_tune_task_id);
                         13             END;
                         14  /
                       
                        PL/SQL 过程就成就。
       
                        SQL> SELECT task_name, status FROM
dba_advisor_log WHERE owner = ‘TEST’;
                       
                        TASK_NAME                      STATUS
                        —————————— ———–
                        ADDM:1184202927_1_201          COMPLETED
                        ADDM:1184202927_1_202          COMPLETED
                        1k659753fzcxn_awr_tuning_task  INITIAL
                       
                        –执行Tuning task:
                       
                        SQL> EXEC
DBMS_SQLTUNE.execute_tuning_task(task_name =>
‘1k659753fzcxn_awr_tuning_task’);
                       
                        PL/SQL 过程就成功就。
                        SQL> SET LONG 999999;
                        SQL> SET PAGESIZE 1000
                        SQL> SET LINESIZE 200
                       
                        –查看Tuning advice:
                       
                        SQL> SELECT
DBMS_SQLTUNE.report_tuning_task(‘1k659753fzcxn_awr_tuning_task’)
AS recommendations FROM dual;
                       
                        RECOMMENDATIONS

                       

                       
                        GENERAL INFORMATION SECTION

                       

                        Tuning Task Name                  :
1k659753fzcxn_awr_tuning_task
                        Tuning Task Owner                 : TEST
                        Scope                             :
COMPREHENSIVE
                        Time Limit(seconds)               : 60
                        Completion Status                 : COMPLETED
                        Started at                        : 07/09/2008
22:40:27
                        Completed at                      : 07/09/2008
22:40:28
                       

                       

                        Schema Name: TEST
                        SQL ID     : 1k659753fzcxn  
                        SQL Text   : select /*We will trace this sql*/
name,addr,insertdata from
                                     (select name,addr,insertdata,rank()
over(partition by name,addr
                                     order by insertdata desc) rn from t
) where rn = 1
                       

                       

                        ADDITIONAL INFORMATION SECTION

                       

                        -优化程序不克统一在执行计划之行 ID 1
处的视图。.
                       

                       

                        EXPLAIN PLANS SECTION

                       

                       
                        1- Original
                        ———–
                        Plan hash value: 3047187157
                       

                       

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

                       

                        –
                        |   0 | SELECT STATEMENT         |      |     8
|   368 |     4  (25)| 00:00:01
                        |
                        |*  1 |  VIEW                    |      |     8
|   368 |     4  (25)| 00:00:01
                        |
                        |*  2 |   WINDOW SORT PUSHED RANK|      |     8
|   136 |     4  (25)| 00:00:01
                        |
                        |   3 |    TABLE ACCESS FULL     | T    |     8
|   136 |     3   (0)| 00:00:01
                        |

                       

                        –
                       
                        Predicate Information (identified by operation
id):

                       

                       
                           1 – filter(“RN”=1)
                           2 – filter(RANK() OVER ( PARTITION BY
“NAME”,”ADDR” ORDER BY
                                      INTERNAL_FUNCTION(“INSERTDATA”)
DESC )<=1)
                       

                       

                       
                        –中断Tuning task:
                       
                        EXEC DBMS_SQLTUNE.interrupt_tuning_task
(task_name => ‘1k659753fzcxn_awr_tuning_task’);
                       
                        –继续Tuning task:
                       
                        EXEC DBMS_SQLTUNE.resume_tuning_task
(task_name => ‘1k659753fzcxn_awr_tuning_task’);
       
                        –取消Tuning task:
                       
                        EXEC DBMS_SQLTUNE.cancel_tuning_task
(task_name => ‘1k659753fzcxn_awr_tuning_task’);
       
                        –重置Tuning task:
                       
                        SQL> SELECT task_name, status FROM
dba_advisor_log WHERE owner = ‘TEST’;

                        TASK_NAME                      STATUS
                        —————————— ———–
                        ADDM:1184202927_1_201          COMPLETED
                        ADDM:1184202927_1_202          COMPLETED
                        1k659753fzcxn_awr_tuning_task  COMPLETED
                       
                        SQL> EXEC DBMS_SQLTUNE.reset_tuning_task
(task_name => ‘1k659753fzcxn_awr_tuning_task’);
                       
                        PL/SQL 过程就成功就。
                       
                        SQL> SELECT task_name, status FROM
dba_advisor_log WHERE owner = ‘TEST’;
                       
                        TASK_NAME                      STATUS
                        —————————— ———–
                        ADDM:1184202927_1_201          COMPLETED
                        ADDM:1184202927_1_202          COMPLETED
                        1k659753fzcxn_awr_tuning_task  INITIAL       
       
                       
                        –删除Tuning task:
                       
                        SQL> BEGIN
                        2    DBMS_SQLTUNE.drop_tuning_task
(task_name => ‘1k659753fzcxn_awr_tuning_task’);
                        3  END;
                        4  /
                       
                        PL/SQL 过程已经成功就。
                       
                        SQL> SELECT task_name, status FROM
dba_advisor_log WHERE owner = ‘TEST’;

                        TASK_NAME                      STATUS
                        —————————— ———–
                        ADDM:1184202927_1_201          COMPLETED
                        ADDM:1184202927_1_202          COMPLETED
                       
                –b、通过cursor cache设置Tuning任务.
               
                        –方法大概如下,这里我们就是不再另外举例了。
               
                        DECLARE
                          l_sql_tune_task_id  VARCHAR2(100);
                        BEGIN
                          l_sql_tune_task_id :=
DBMS_SQLTUNE.create_tuning_task (
                                                  sql_id      =>
‘1k659753fzcxn’,
                                                  scope       =>
DBMS_SQLTUNE.scope_comprehensive,
                                                  time_limit  =>
60,
                                                  task_name   =>
‘1k659753fzcxn_tuning_task’,
                                                  description =>
‘Tuning task for statement 1k659753fzcxn.’);
                        
 DBMS_OUTPUT.put_line(‘l_sql_tune_task_id: ‘ ||
l_sql_tune_task_id);
                        END;
                        /
                       
                –c、通过SQL tuning set设置Tuning任务.

                        我们好创造调整SQL的集合:
                       
                        SQL> CONN /AS SYSDBA
                        已连接。
                       
                        SQL> GRANT ADMINISTER ANY SQL TUNING SET TO
TEST;
                        授权成功。
                       
                        SQL> CONN TEST/TEST
                        已连接。
                       
                        SQL> BEGIN
                          2    DBMS_SQLTUNE.create_sqlset (
                          3      sqlset_name  =>
‘test_sql_tuning_set’,
                          4      description  => ‘A test SQL tuning
set.’);
                          5  END;
                          6  /
                       
                        PL/SQL 过程都成做到。
                       
                        SQL> SELECT OWNER,NAME FROM DBA_SQLSET;
                       
                        OWNER                          NAME

                        ——————————

                        TEST                         
 test_sql_tuning_set
                       
                        SQL> declare
                          2     cur dbms_sqltune.sqlset_cursor;
                          3  begin
                          4     open cur for select value(p) from
table(dbms_sqltune.select_cursor_cache(‘parsing_schema_name =
”TEST” ‘,null,null,null,null,1,null,’ALL’)) P;
                          5 
   dbms_sqltune.load_sqlset(sqlset_name=>’test_sql_tuning_set’,populate_cursor=>cur);
                          6  end;
                          7  /
                       
                        PL/SQL 过程就成就。
                       
                        SQL> select count(*) from
table(dbms_sqltune.select_sqlset(‘test_sql_tuning_set’
                        , ‘parsing_schema_name = ”TEST” ‘));
                       
                          COUNT(*)
                        ———-
                                17
                       
                       
                        SQL> declare
                          2     my_task_name varchar2(30);
                          3  begin
                          4     my_task_name :=
dbms_sqltune.create_tuning_task(sqlset_name=>’test_sql_tuning_set’,
                          5     time_limit=>600,
                          6     scope=>’COMPREHENSIVE’,
                          7     task_name=>’test_tuning_task’,
                          8     description=>’test tuning task’);
                          9  end;
                         10  /
                       
                        PL/SQL 过程已经成就。
                       
                        SQL> begin
                          2 
   dbms_sqltune.set_tuning_task_parameter(
                          3     task_name=> ‘test_tuning_task’,
                          4     parameter => ‘TIME_LIMIT’,
                          5     value=>800);
                          6  end;
                          7  /
                       
                        PL/SQL 过程已经成功完成。
                       
                        SQL> exec
dbms_sqltune.execute_tuning_task(task_name =>
‘test_tuning_task’);
                       
                        PL/SQL 过程都成功完成。
                       
                        SQL> set long 999999
                        SQL> set longchunksize 1000
                        SQL> set linesize 200
                        SQL> select
dbms_sqltune.report_tuning_task(‘test_tuning_task’) from dual;
                       
                       
DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TEST_TUNING_TASK’)                
                                                          

                       

                        GENERAL INFORMATION SECTION                   
                                                                       
       
                       
——————————————————————————- 
                                              
                        Tuning Task Name                  :
test_tuning_task                                                    
                      
                        Tuning Task Owner                 : TEST       
                                                                       
       
                        Scope                             :
COMPREHENSIVE                                                          
                   
                        Time Limit(seconds)               : 800       
                                                                       
       
                        Completion Status                 : COMPLETED 
                                                                       
       
                        Started at                        : 07/10/2008
12:38:55                                                                
       
                        Completed at                      : 07/10/2008
12:38:59                                                                
       
                        SQL Tuning Set (STS) Name         :
test_sql_tuning_set                                                 
                      
                        SQL Tuning Set Owner              : TEST       
                                                                       
       
                       
                       
DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TEST_TUNING_TASK’)                
                                                          

                       

                        Number of Statements in the STS   : 17          
                                                                       
      
                        Number of Statements in the Report: 17          
                                                                       
      
                        Number of Statements with Findings: 7          
                                                                       
       
                        Number of Statistic Findings      : 9          
                                                                       
       
                        Number of SQL Profile Findings    : 2          
                                                                       
       
                        Number of SQL Restructure Findings: 1          
                                                                       
       
                        Number of Errors                  : 1  
                       
                        …………………………………..
                        …………………………………..       
                                                                       
       
                                                                        
                                                                       
      
                        这里虽非显得分析结果了,上千履之解析结果。     
 
                       
                        和创建Tuning
task类似,select_sqlset也得从AWR中获得sql集合,也不过拷贝其他集合。这里不再详细介绍。

                –d、通过manually specified statement设置Tuning任务.
               
                        –没有绑定变量的气象:
               
                        SQL> DECLARE
                          2    l_sql               VARCHAR2(500);
                          3    l_sql_tune_task_id  VARCHAR2(100);
                          4  BEGIN
                          5    l_sql := ‘select /*We will trace this
sql*/ name,addr,insertdata from
                          (select name,addr,insertdata,rank()
over(partition by name,addr order by
                          insertdatadesc) rn from t ) where rn = 1′;
                          7    l_sql_tune_task_id :=
DBMS_SQLTUNE.create_tuning_task (
                          8                            sql_text   
=> l_sql,
                          9                            user_name 
 => ‘TEST’,
                         10                            scope       =>
DBMS_SQLTUNE.scope_comprehensive,
                         11                           
time_limit  => 60,
                         12                            task_name 
 => ‘test_tuning_task’,
                         13                            description =>
‘Tuning task for an a simple query.’);
                         14   
DBMS_OUTPUT.put_line(‘l_sql_tune_task_id: ‘ ||
l_sql_tune_task_id);
                         15  END;
                         16  /
                       
                        PL/SQL 过程已经成功就。
                       
                        SQL> EXEC
DBMS_SQLTUNE.execute_tuning_task(task_name =>
‘test_tuning_task’);
                       
                        PL/SQL 过程已经成功完成。
                       
                        SQL> SELECT
DBMS_SQLTUNE.report_tuning_task(‘test_tuning_task’) AS
recommendations FROM dual;
                       
                        RECOMMENDATIONS

                       

                       
                        GENERAL INFORMATION SECTION

                       

                        Tuning Task Name                  :
test_tuning_task
                        Tuning Task Owner                 : TEST
                        Scope                             :
COMPREHENSIVE
                        Time Limit(seconds)               : 60
                        Completion Status                 : COMPLETED
                        Started at                        : 07/10/2008
01:17:09
                        Completed at                      : 07/10/2008
01:17:09
                        Number of Statistic Findings      : 1
                       
                       
                        RECOMMENDATIONS

                       

                       

                       

                        Schema Name: TEST
                        SQL ID     : 3zdbsrhb1mhuq 
 –该处的sql_id显示不得法,可能是oracle的一个 bug
                        SQL Text   : select /*We will trace this sql*/
name,addr,insertdata from
                                     (select name,addr,insertdata,rank()
over(partition by name,addr
                                     order by insertdata desc) rn from t
) where rn = 1
                       

                       

                        FINDINGS SECTION (1 finding)

                       

                       
                       
                        RECOMMENDATIONS

                       

                       
                        1- Statistics Finding
                        ———————
                        尚未分析表 “TEST”.”
                       
                          Recommendation
                          ————–
                          – 考虑收集此表的大好
                            execute
dbms_stats.gather_table_stats(ownname => ‘TEST’, tabname =>
‘T’,
                                    estimate_percent =>
DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt =>
                                    ‘FOR ALL COLUMNS SIZE AUTO’);
                       
                       
                        RECOMMENDATIONS

                       

                       
                          Rationale
                          ———
                        为了挑选好之尽计划, 优化程序要
                       

                       

                        ADDITIONAL INFORMATION SECTION

                       

                        -优化程序不克统一在执行计划的行 ID 1
处的视图。.
                       

                       

                        EXPLAIN PLANS SECTION
                       
                        RECOMMENDATIONS

                       

                       

                       

                       
                        1- Original
                        ———–
                        Plan hash value: 3047187157
                       

                       

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

                       

                       
                        |   0 | SELECT STATEMENT         |      |     8
|   368 |     4  (25)| 00:00:01
                        |*  1 |  VIEW                    |      |     8
|   368 |     4  (25)| 00:00:01
                       
                        RECOMMENDATIONS

                       

                       
                        |*  2 |   WINDOW SORT PUSHED RANK|      |     8
|   264 |     4  (25)| 00:00:01
                        |   3 |    TABLE ACCESS FULL     | T    |     8
|   264 |     3   (0)| 00:00:01

                       

                       
                       
                        Predicate Information (identified by operation
id):

                       

                       
                           1 – filter(“RN”=1)
                           2 – filter(RANK() OVER ( PARTITION BY
“NAME”,”ADDR” ORDER BY
                                      INTERNAL_FUNCTION(“INSERTDATA”)
DESC )<=1)
                       
                       
                        RECOMMENDATIONS

                       

                       

                       

                       
                       
                        –带有绑定变量的情状:
                       
                        SQL> variable var_1 number;
                        SQL> variable var_2 number;
                        SQL> variable var_3 number;
                        SQL> exec :var_1 := 5;
                       
                        PL/SQL 过程就成就。
                       
                        SQL> exec :var_2 := 4;
                       
                        PL/SQL 过程已经成完成。
                       
                        SQL> exec :var_3 := 3;
                       
                        PL/SQL 过程都成完成。
                       
                        SQL> select id,name,addr from t where
id<>:var_1 and id<:var_2 and id<:var_3;
                       
                                ID NAME                 ADDR

                        ———- ——————–

                                 1 张                   北京
                                 2 张                   北京
                       
                        SQL> SELECT task_name, status FROM
dba_advisor_log WHERE owner = ‘TEST’;
                       
                        TASK_NAME                      STATUS
                        —————————— ———–
                        ADDM:1184202927_1_201          COMPLETED
                        ADDM:1184202927_1_202          COMPLETED
                        test_tuning_task               COMPLETED
                       
                        SQL> BEGIN
                          2     DBMS_SQLTUNE.drop_tuning_task
(task_name => ‘test_tuning_task’);
                          3  END;
                          4  /
                       
                        PL/SQL 过程就成功做到。
                       
                        SQL>
                        SQL>
                        SQL> DECLARE
                          2    l_sql               VARCHAR2(500);
                          3    l_sql_tune_task_id  VARCHAR2(100);
                          4  BEGIN
                          5    l_sql := ‘select id,name,addr from t
where id<>:var_1 and id<:var_2 and i
                        d<:var_3′;
                          6
                          7    l_sql_tune_task_id :=
DBMS_SQLTUNE.create_tuning_task (
                          8                            sql_text   
=> l_sql,
                          9                            bind_list 
 => sql_binds(anydata.ConvertNumber(5),
                  anydata.ConvertNumber(4),anydata.ConvertNumber(3)),
                         10                            user_name 
 => ‘TEST’,
                         11                            scope       =>
DBMS_SQLTUNE.scope_comprehensive,
                         12                           
time_limit  => 60,
                         13                            task_name 
 => ‘test_tuning_task’,
                         14                            description =>
‘Tuning task for an a simple query
                        .’);
                         15   
DBMS_OUTPUT.put_line(‘l_sql_tune_task_id: ‘ ||
l_sql_tune_task_id);
                         16  END;
                         17  /
                       
                        PL/SQL 过程就成功就。
                       
                        SQL> SELECT * FROM DBA_SQLTUNE_BINDS;

                           TASK_ID  OBJECT_ID   POSITION VALUE()

                        ———- ———- ———-

                               393          1          1 ANYDATA()
                               393          1          2 ANYDATA()
                               393          1          3 ANYDATA()
      
                        SQL> EXEC
DBMS_SQLTUNE.execute_tuning_task(task_name =>
‘test_tuning_task’);
                       
                        PL/SQL 过程已经成功就。
                       
                        SQL> SELECT
DBMS_SQLTUNE.report_tuning_task(‘test_tuning_task’) AS
recommendatio
                        ns FROM dual;
                       
                        RECOMMENDATIONS

                       

                       
                        GENERAL INFORMATION SECTION

                       

                        Tuning Task Name                  :
test_tuning_task
                        Tuning Task Owner                 : TEST
                        Scope                             :
COMPREHENSIVE
                        Time Limit(seconds)               : 60
                        Completion Status                 : COMPLETED
                        Started at                        : 07/10/2008
02:04:29
                        Completed at                      : 07/10/2008
02:04:29
                        Number of Statistic Findings      : 1
                       
                       
                        RECOMMENDATIONS

                       

                       

                       

                        Schema Name: TEST
                        SQL ID     : 15c91q9b2sxvk 
 –该处的sql_id显示不科学,可能是oracle的一个 bug
                        SQL Text   : select id,name,addr from t where
id<>:var_1 and id<:var_2 and
                                     id<:var_3
                       

                       

                        FINDINGS SECTION (1 finding)

                       

                       
                        1- Statistics Finding
                       
                        RECOMMENDATIONS

                       

                       
                        ———————
                        尚未分析表 “TESTACCESS”.”
                       
                          Recommendation
                          ————–
                          – 考虑收集此表的美
                            execute
dbms_stats.gather_table_stats(ownname => ‘TEST’, tabname =>
‘T’,
                                    estimate_percent =>
DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt =>
                                    ‘FOR ALL COLUMNS SIZE AUTO’);
                       
                          Rationale
                       
                        RECOMMENDATIONS

                       

                       
                          ———
                        为了选择好的行计划, 优化程序用
                       

                       

                        EXPLAIN PLANS SECTION

                       

                       
                        1- Original
                        ———–
                        Plan hash value: 1601196873
                       
                       
                        RECOMMENDATIONS

                       

                       

                       

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

                       

                        |   0 | SELECT STATEMENT  |      |     8 |   296
|     3   (0)| 00:00:01 |
                        |*  1 |  TABLE ACCESS FULL| T    |     8 | 
 296 |     3   (0)| 00:00:01 |

                       

                       
                        Predicate Information (identified by operation
id):

                       

                       
                           1 – filter(“ID”<>:VAR_1 AND
“ID”<:VAR_2 AND “ID”<:VAR_3)
                       
                        RECOMMENDATIONS

                       

                       
                       

                       

                       

三、SQL Profile:

       
由于缺乏各种消息,优化器有时候会发生不正确的执行计划,通常我们可指定hints来过问执行计划。
        SQL AUTO TUNING通过SQL
Profiling来化解类似的问题。自动调整优化器会创建SQL Profile,SQL
Profile包含SQL语句的扶助统计信息。
       
普通优化模式下,优化器通过量有一个集式、选择性、cost来最终决定用什么的实践计划。SQL
Profile利用存储的附加的音,
       
通过采样或者局部实行的法门来证明一个实行计划是否也极优化,保存历史运行统计信息。
       
        如果一个tuning task accept SQL Profile,SQL
Profile将于永远存储在数码字典中。普通优化模式下,优化器在出执行计划的下
        将下数据库的统计信息整合SQL
Profile的音讯并分析,最终发生最优化的执行计划。
       
        可以采取CATAGORY控制SQL
Profile的运权力,数据库参数sqltune_category为默认DEFAULT。
       
        SQL> SHOW PARAMETER SQLTUNE
       
        NAME                                 TYPE        VALUE

        ———————————— ———–

        sqltune_category                     string      DEFAULT
       
       
我们啊足以修改数据库参数文件,指定我们好之SQLTUNE_CATEGORY:
       
        ALTER SYSTEM SET SQLTUNE_CATEGORY = PROD;
       
        SQL Profiles apply to the following statement types:
       
        SELECT statements
        UPDATE statements
        INSERT statements (only with a SELECT clause)
        DELETE statements
        CREATE TABLE statements (only with the AS SELECT clause)
        MERGE statements (the update or insert operations)

        SQL Profile基本操作:
       
                SQL> conn /as sysdba
                已连接。
                SQL> GRANT CREATE ANY SQL_PROFILE TO TEST;
               
                授权成功。
               
                SQL> GRANT DROP ANY SQL PROFILE TO TEST;
               
                授权成功。
               
                SQL> GRANT ALTER ANY SQL PROFILE TO TEST;
               
                授权成功。
               
                SQL> CONN TEST/TEST
                已连接。
               
                SET SERVEROUTPUT ON
                DECLARE
                  l_sql_tune_task_id  VARCHAR2(20);
                BEGIN
                  l_sql_tune_task_id :=
DBMS_SQLTUNE.accept_sql_profile (
                                          task_name =>
‘test_tuning_task’,
                                          name      =>
‘test_profile’);
                  DBMS_OUTPUT.put_line(‘l_sql_tune_task_id: ‘ ||
l_sql_tune_task_id);
                END;
                /
               
                BEGIN
                  DBMS_SQLTUNE.alter_sql_profile (
                    name            => ‘test_profile’,
                    attribute_name  => ‘STATUS’,
                    value           => ‘DISABLED’);
                END;
                /
               
                BEGIN
                  DBMS_SQLTUNE.drop_sql_profile (
                    name   => ‘test_profile’,
                    ignore => TRUE);
                END;
                /
               
                –example:
               
                SQL> execute
dbms_sqltune.accept_sql_profile(task_name =>
‘test_tuning_task’,object_id => 6, replace => TRUE);
               
                SQL> select count(1) from DBA_SQL_PROFILES;

                  COUNT(1)
                ———-
                         1

PL/SQL 过程已经成就。

季、几个有效之automatic SQL tuning相关的数额字典:

        DBA_ADVISOR_TASKS
        DBA_ADVISOR_FINDINGS
        DBA_ADVISOR_RECOMMENDATIONS
        DBA_ADVISOR_RATIONALE
        DBA_SQLTUNE_STATISTICS
        DBA_SQLTUNE_BINDS
        DBA_SQLTUNE_PLANS
        DBA_SQLSET
        DBA_SQLSET_BINDS
        DBA_SQLSET_STATEMENTS
        DBA_SQLSET_REFERENCES
        DBA_SQL_PROFILES
        V$SQL
        V$SQLAREA
        V$ACTIVE_SESSION_HISTORY

五、DBMS_SQLTUNE包的详尽措施好参照:

       
http://download-west.oracle.com/docs/cd/B13789_01/appdev.101/b10802/d_sqltun.htm

相关文章