zoukankan      html  css  js  c++  java
  • Utilize Sql Tuning Advisor from Script

    Sql Tuning Advisor是10g以后出现的一个十分有用的调优工具,大多数情况下我们可以通过dbconsole或者Grid Control的web界面调用SQL Advisor;但如果系统中没有配置dbconsole或者Grid Control的话,我们则需要通过手动调用DBMS_SQLTUNE PL/SQL程序包来使用该特性。这里我列出一个针对单个SQL语句Autotune的脚本,具体脚本:
    
    begin
      DBMS_SQLTUNE.drop_tuning_task('&task_name');
    end;
    /
    
    
    
    DECLARE
      my_task_name VARCHAR2(30);
      my_sqltext CLOB;
      my_sqlid varchar2(30);
    BEGIN
      my_sqlid := '&sqlid';
      my_task_name := dbms_sqltune.create_tuning_task(sql_id => my_sqlid,
                                                      scope => 'COMPREHENSIVE',
                                                      time_limit => 300,
                                                      task_name => '&task_name',
                                                      description => 'comment'                               
                                                      );
    END;
    /
    
    
    BEGIN
      dbms_sqltune.execute_tuning_task(task_name => '&task_name');
    END;
    /
    
    SELECT status FROM USER_ADVISOR_TASKS WHERE task_name = '&task_name';
    
    SET LONG 10000
    SET LONGCHUNKSIZE 10000
    SET LINESIZE 100
    set pages 60
    
    SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('&task_name') FROM DUAL;
    
    具体使用示例:
    SQL> begin
      DBMS_SQLTUNE.drop_tuning_task('&task_name');
    end;
    /
    Enter value for task_name: newtask
    old   3:   DBMS_SQLTUNE.drop_tuning_task('&task_name');
    new   3:   DBMS_SQLTUNE.drop_tuning_task('newtask');
    begin
    *
    ERROR at line 1:
    ORA-13605: The specified task or object newtask does not exist for the current
    user.
    ORA-06512: at "SYS.PRVT_ADVISOR", line 2307
    ORA-06512: at "SYS.DBMS_ADVISOR", line 172
    ORA-06512: at "SYS.DBMS_SQLTUNE", line 751
    ORA-06512: at line 3
    
    SQL> DECLARE
      my_task_name VARCHAR2(30);
      my_sqltext CLOB;
      my_sqlid varchar2(30);
    BEGIN
      my_sqlid := '&sqlid';
      my_task_name := dbms_sqltune.create_tuning_task(sql_id => my_sqlid,
                                                      scope => 'COMPREHENSIVE',
                                                      time_limit => 300,
                                                      task_name => '&task_name',
                                                      description => 'comment'                               
                                                      );
    END;
    / 
    Enter value for sqlid: 17usubxchdf2w
    old  11:   my_sqlid := '&sqlid';
    new  11:   my_sqlid := '17usubxchdf2w';
    Enter value for task_name: new_task 
    old  19:						   task_name => '&task_name',
    new  19:						   task_name => 'new_task',
    
    SQL> BEGIN
      dbms_sqltune.execute_tuning_task(task_name => '&task_name');
    END;
    /  
    Enter value for task_name: new_task
    old   3:   dbms_sqltune.execute_tuning_task(task_name => '&task_name');
    new   3:   dbms_sqltune.execute_tuning_task(task_name => 'new_task');
    
    PL/SQL procedure successfully completed.
    
    SQL> SELECT status FROM USER_ADVISOR_TASKS WHERE task_name = '&task_name';
    Enter value for task_name: new_task
    old   1: SELECT status FROM USER_ADVISOR_TASKS WHERE task_name = '&task_name'
    new   1: SELECT status FROM USER_ADVISOR_TASKS WHERE task_name = 'new_task'
    
    STATUS
    -----------
    COMPLETED
    
    SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('&task_name') FROM DUAL;
    Enter value for task_name: new_task
    old   1: SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('&task_name') FROM DUAL
    new   1: SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('new_task') FROM DUAL
    
    DBMS_SQLTUNE.REPORT_TUNING_TASK('NEW_TASK')
    ----------------------------------------------------------------------------------------------------
    GENERAL INFORMATION SECTION
    -------------------------------------------------------------------------------
    Tuning Task Name   : new_task
    Tuning Task Owner  : SYS
    Workload Type	   : Single SQL Statement
    Scope		   : COMPREHENSIVE
    Time Limit(seconds): 300
    Completion Status  : COMPLETED
    Started at	   : 03/25/2011 00:14:41
    Completed at	   : 03/25/2011 00:14:45
    
    -------------------------------------------------------------------------------
    Schema Name: SYS
    SQL ID	   : 17usubxchdf2w
    SQL Text   : select count(t1) from hashtab
    
    -------------------------------------------------------------------------------
    FINDINGS SECTION (1 finding)
    -------------------------------------------------------------------------------
    
    1- Statistics Finding
    ---------------------
      Table "SYS"."HASHTAB" was not analyzed.
    
      Recommendation
      --------------
      - Consider collecting optimizer statistics for this table.
        execute dbms_stats.gather_table_stats(ownname => 'SYS', tabname =>
    	    'HASHTAB', 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: 485915006
    
    ------------------------------------------------------------------------------
    | Id  | Operation	   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
    ------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |	     |	   1 |	  13 |	   2   (0)| 00:00:01 |
    |   1 |  SORT AGGREGATE    |	     |	   1 |	  13 |		  |	     |
    |   2 |   TABLE ACCESS FULL| HASHTAB |	 102 |	1326 |	   2   (0)| 00:00:01 |
    ------------------------------------------------------------------------------
    
  • 相关阅读:
    六.(二)oc分类-category(范畴、非正式协议)
    十二 .ocBlock
    十.oc内存管理
    七.(一)oc通知-NSNotification(通知中心-NSNotificationCenter)
    Storyboard中segue(转场)使用
    XCode 7.3.1(dmg) 官方直接下载地址
    jquery 判定checkbox是否选中
    SqlService 并发测试
    SQL Server 消息队列,处理程序错误
    DB开启 Service Broker,使用消息队列
  • 原文地址:https://www.cnblogs.com/macleanoracle/p/2967719.html
Copyright © 2011-2022 走看看