DBMS_ADVISOR包

时间:2015-10-07 06:41:39

标签: database oracle plsql database-administration

我正在尝试使用oracle SQL access advisor实用程序。

有关性能调整和表分区的建议。

但是当我尝试使用它时,我没有给出任何结果,并说这项任务没有结果。

我正在尝试下面的代码来生成建议这是SCOTT模式的一个例子,它也给了我同样的错误

declare

    v_sql varchar2(2000) := 'select * from emp where empno in (7369,7499)';

    v_tuning_task varchar2(200) := 'tune_task_advisor_view7';

    v_tune_result clob;

begin



    dbms_advisor.quick_tune ( dbms_advisor.sqlaccess_advisor , v_tuning_task, v_sql );

    DBMS_ADVISOR.reset_task(v_tuning_task);

    dbms_advisor.set_task_parameter(v_tuning_task, 'ANALYSIS_SCOPE', 'ALL');

    dbms_advisor.set_task_parameter(v_tuning_task, 'STORAGE_CHANGE', '10000000');

    dbms_advisor.set_task_parameter ( v_tuning_task, 'MODE', 'COMPREHENSIVE');

    dbms_output.put_line ('Quick Tune Completed');

end;



SELECT DBMS_ADVISOR.get_task_script ('tune_task_advisor_view7') AS script FROM dual;

错误 -

SELECT DBMS_ADVISOR.get_task_script ('tune_task_advisor_view7') AS script FROM dual
Error report -
SQL Error: ORA-13631: The most recent execution of task    tune_task_advisor_view7 contains no results.
ORA-06512: at "SYS.PRVT_ADVISOR", line 3350
ORA-06512: at "SYS.DBMS_ADVISOR", line 641
ORA-06512: at line 1
13631. 00000 -  "The most recent execution of task %s contains no results."
*Cause:    The user attempted to create a report or script from a task that
       has not successfully completed an execution.
*Action:   Execute the task and then retry the operation

还有一个,当我评论所有SET_TASK_PARAMETER程序然后它运行但没有提供输出就像的任何建议 -

SCRIPT                                                                      
 --------------------------------------------------------------------------------
Rem  SQL Access Advisor: Version 11.2.0.3.0 -        Production                     
Rem                                                                             
Rem  Username:                                                                  

我有什么参数可以在这里定义。

对于RESET_TASK,如果我没有rest_task那么它也给我错误,所以我在这里使用它。

提前致谢

3 个答案:

答案 0 :(得分:0)

当我收到此错误时,这通常意味着DBMS_ADVISOR根据其诊断信息没有任何关于配置文件的建议,因此它不会返回报告。我通常不会尝试生成ADDM顾问程序报告,而是查找我可以为查询找到的所有HASH计划,对这些哈希值运行解释计划,然后对具有最佳计划的那个进行概要分析。

答案 1 :(得分:0)

我忘了执行任务!

exec dbms_advisor.execute_task('tune_task_advisor_view7');

然后

SELECT DBMS_ADVISOR.get_task_script ('tune_task_advisor_view7') AS script FROM 
dual;

OUTPUT

 SCRIPT
 --------------------------------------------------------------------------------
Rem  SQL Access Advisor: Version 12.1.0.2.0 - Production
Rem
Rem  Username:        CHRIS
Rem  Task:            tune_task_advisor_view7
Rem  Execution date:
Rem

/* RETAIN INDEX "SCOTT"."PK_EMP" */

答案 2 :(得分:0)

  1. 查找查询SQL_ID

    的地址和哈希值

    从v $ sqlarea中选择地址,hash_value,plan_hash_value,其中sql_id ='3mx8whn1c5jbb';

  2. 从光标缓存中清除计划(仅当确定它是错误的计划时)。在清除计划之前,统计数据应该是最新的。

    exec sys.dbms_shared_pool.purge(',','C');

    exec sys.dbms_shared_pool.purge('00000005DF37F740,46318955','C');

  3. 创建调整计划(如果不存在)。

    变量stmt_task VARCHAR2(64);

    SETERSERTPUT ON LINESIZE 200 PAGESIZE 20000 LONG 9999

    EXEC:stmt_task:= DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id =>'3mx8whn1c5jbb',task_name =>'3mx8whn1c5jbb_AWR_tuning_task');

    从DUAL中选择DBMS_SQLTUNE.REPORT_TUNING_TASK('3mx8whn1c5jbb_AWR_tuning_task','TEXT','TYPICAL','FINDINGS');

  4. 如果报告了调整计划。接受新计划。

    DECLARE

    sqlprofile_name VARCHAR2(30);

    BEGIN

    sqlprofile_name:= DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(

    task_name => '3mx8whn1c5jbb_AWR_tuning_task'

    ,name => 'sql_profile_1'

    ,force_match =>真

    );

    END;

    /

  5. 如果创建配置文件不起作用或游标缓存中不存在该计划,请检查AWR存储库以查看是否存在更好的计划。

  6. 如果您的AWR存储库具有正确的计划,则可以重新运行上述查询,并使用该选项从AWR存储库获取哈希值和sql_id。

    如果这不起作用。然后我使用了ADDM(如上所述)。