问题描述
嗨,克里斯/康纳。我们有一个生产12c数据库 (12.2.0.1),并为高负载查询启用了特定的SQL计划基线,但由于某种原因,它没有被使用。基线已启用并已修复,并且refered列显示为 “是”,但是在执行DBMS_XPLAN.DISPLAY_CURSOR等时,我在last_expermed或last_refered上看不到日期,并且在注释中也看不到计划名称。计划是基线和计划历史中唯一的计划。我已经检查了名为那里的表和索引是否存在并且是有效的 (并且对于索引可见),没有远程表被引用,并且SQL是从DBA_SQL_PLAN_BASELINES的PARSING_SCHEMA_NAME中指定的相同架构执行的。
我想知道我必须确定为什么不执行计划的选项 (即显示为什么不使用特定计划的数据字典视图)。优化器是否将其决策保存在不使用sql计划基准的地方?提前感谢您的帮助。
我想知道我必须确定为什么不执行计划的选项 (即显示为什么不使用特定计划的数据字典视图)。优化器是否将其决策保存在不使用sql计划基准的地方?提前感谢您的帮助。
专家解答
尝试此以获取更多信息
-alter会话集事件 '跟踪 [SQL_Compiler.*]';
-(运行您的查询)
-从表 (dbms_xplan.display_curs()) 中选择 *;
在跟踪文件中,应该有一个 “SPM计划转储” 部分-通常包含有关我们为什么使用基线的更多信息。
如果您对此没有任何乐趣,那么一个不错的选择是通过以下方式获取SQL测试用例
这对整个执行过程进行了彻底的分析,并可以通过SR上传以支持
-alter会话集事件 '跟踪 [SQL_Compiler.*]';
-(运行您的查询)
-从表 (dbms_xplan.display_curs()) 中选择 *;
在跟踪文件中,应该有一个 “SPM计划转储” 部分-通常包含有关我们为什么使用基线的更多信息。
如果您对此没有任何乐趣,那么一个不错的选择是通过以下方式获取SQL测试用例
SQL> variable tc clob; SQL> begin 2 dbms_sqldiag.export_sql_testcase( 3 directory=>'TEMP', 4 sql_id=>'your-sql-id', 5 testcase=>:tc); 6 end; 7 / PL/SQL procedure successfully completed.
这对整个执行过程进行了彻底的分析,并可以通过SR上传以支持
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




