我正在尝试使用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那么它也给我错误,所以我在这里使用它。
提前致谢
答案 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)
查找查询SQL_ID
的地址和哈希值从v $ sqlarea中选择地址,hash_value,plan_hash_value,其中sql_id ='3mx8whn1c5jbb';
从光标缓存中清除计划(仅当确定它是错误的计划时)。在清除计划之前,统计数据应该是最新的。
exec sys.dbms_shared_pool.purge(',','C');
exec sys.dbms_shared_pool.purge('00000005DF37F740,46318955','C');
创建调整计划(如果不存在)。
变量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');
如果报告了调整计划。接受新计划。
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;
/
如果创建配置文件不起作用或游标缓存中不存在该计划,请检查AWR存储库以查看是否存在更好的计划。
如果您的AWR存储库具有正确的计划,则可以重新运行上述查询,并使用该选项从AWR存储库获取哈希值和sql_id。
如果这不起作用。然后我使用了ADDM(如上所述)。