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

Oracle 正确识别优化器运行的动态采样查询

askTom 2017-04-19
1383

问题描述

很明显,优化器运行的动态采样查询包含/* DS_SVC */ 其中的子句 (当被跟踪时)。
例如。
选择/* DS_SVC */ /* 动态采样 (0) 否 _ sql _ 调谐否 _ 监控
optimizer_features_enable (默认值) no_parallel result_cache (快照 = 3600)
*/总和 (C1)
来自
(选择/* qb_name (“innerQuery”) NO_INDEX_FFS (“TEST_TAB”) */ 1为
C1 来自 IFSAPP."TEST_TAB" SAMPLE BLOCK(0.51398, 8) SEED(1)
"TEST_TAB" 其中 ("TEST_TAB"."ATTRIBUTE" = 'Client') 和
("TEST_TAB"。"MAIN_TYPE" = 'LU') 和 ("TEST_TAB"。"PATH" LIKE
导航。%.FULL_SCHEDULE_DONE % ') 内查询


但是我注意到有一组查询包含子句/* OPT_DYN_SAMP */在里面。
例如。
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS IGNORE_WHERE_CLAUSE NO_PARALLEL(SAMPLESUB) opt_param('parallel_execution_enabled', 'false') NO_PARALLEL_INDEX(SAMPLESUB) NO_SQL_TUNE */ NVL(SUM(C1),0), NVL(SUM(C2),0) 来自 (SELECT /*+ IGNORE_WHERE_CLAUSE NO_PARALLEL("A") FULL("A") NO_PARALLEL_INDEX("A") */ 1 AS C1, CASE WHEN "A"."BUFFER"=:B1 THEN 1 ELSE 0 END AS C2 来自 "IFSAPP"."PLSQLAP_BUFFER_TMP" "A") SAMPLESUB

用/* OPT_DYN_SAMP */这种类型的查询的目的是什么。与动态采样有关吗?

是否有任何适当的方法可以清楚地识别Oracle 12c中优化器完成的所有类型的动态采样查询?在Oracle支持或外部找不到清晰的文档对此进行解释。

专家解答

嗨,纳文思,

优化器团队生成的大多数内部SQL都包含注释,以使他们更容易在共享池中识别这些语句,并计算它们增加了哪些额外开销或消耗了系统资源。

正如您正确识别的那样,带有注释DS_SVC和OPT_DYN_SAMP的SQL语句是动态采样启动时生成的内部SQL语句。

这是我们用于识别内部SQL语句以进行动态采样的仅有的两个注释。

那么,为什么我们使用两种不同的评论?

OPT_DYN_SAMP表示动态采样语句,当常规统计信息不足以获得高质量的基数估计值或统计信息完全丢失时触发这些语句。有关此类动态采样的更多信息,请访问Optimizer博客https://blogs.oracle.com/optimizer/entry/dynamic_sampling_and_its_impact_on_the_optimizer

DS_SVC表示由Oracle数据库11gR2或12c中的动态统计信息触发的语句。有关动态统计信息的更多信息,请访问数据库SQL调优指南https://docs.oracle.com/database/121/TGSQL/tgsql_astat.htm#TGSQL450
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论