暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 找出为什么不使用SQL计划基线的方法

ASKTOM 2021-06-10
447

问题描述

嗨,克里斯/康纳。我们有一个生产12c数据库 (12.2.0.1),并为高负载查询启用了特定的SQL计划基线,但由于某种原因,它没有被使用。基线已启用并已修复,并且refered列显示为 “是”,但是在执行DBMS_XPLAN.DISPLAY_CURSOR等时,我在last_expermed或last_refered上看不到日期,并且在注释中也看不到计划名称。计划是基线和计划历史中唯一的计划。我已经检查了名为那里的表和索引是否存在并且是有效的 (并且对于索引可见),没有远程表被引用,并且SQL是从DBA_SQL_PLAN_BASELINES的PARSING_SCHEMA_NAME中指定的相同架构执行的。

我想知道我必须确定为什么不执行计划的选项 (即显示为什么不使用特定计划的数据字典视图)。优化器是否将其决策保存在不使用sql计划基准的地方?提前感谢您的帮助。


专家解答

尝试此以获取更多信息

-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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论