dynamic_sampling 提示在 oracle 12c 中导致问题的查询
dynamic_sampling hint in queries causing issues in oracle 12c
dba 告诉我们,我们的应用程序导致服务器出现问题。
有如下开头的查询:
SELECT /* DS_SVC */ /*+ dynamic_sampling(0) no_sql_tune no_monitoring
optimizer_features_enable(default) no_parallel result_cache(snapshot=3600)
OPT_ESTIMATE(@"innerQuery", TABLE, "THIS_#21", SCALE_ROWS=0.0007347778778)
*/ SUM(C1) FROM ...
他们使服务器崩溃,我们收到 ORA-12537。
我们正在使用 NHibernate,但我相当确定这些查询不是由我们的应用程序生成的。这些查询在业务逻辑中没有任何意义,它们是一些随机连接。我们没有 sql 跟踪权限,但在 dba 给我们的日志中,这些查询是在我们的模块名称下执行的。
我搜索了一下,发现 DS_SVC 是对 Oracle12 在动态采样中使用的一些服务查询的注释。
我们的查询并不十分复杂,有几个 rownum 限制为 1000 的左连接。
所以问题是 - 我可以说那些 DS_SVC 查询是 dba 方面的问题吗?如果是这样,我在哪里可以获得一些文档来证明这一点?
看起来像是 12c 的错误。看看改变这个是否有帮助。也可以咨询Oracle支持。
ALTER SESSION SET “_fix_control”=’7452863:0′
https://www.pythian.com/blog/performance-problems-with-dynamic-statistics-in-oracle-12c/
DYNAMIC_SAMPLING hint 用于让CBO收集
运行 时间内的基数。
Looks like algorithm has been changed in 12c and dynamic sampling is
triggered in a broader set of use cases. This behavior can be disabled
at statement, session or system level using the fix control for the
bug 7452863. For example, ALTER SESSION SET
“_fix_control”=’7452863:0′;
这些查询是由优化器本身生成的。该功能称为 "Dynamic sampling"。在 11g 之前,默认情况下仅在表上没有统计信息时使用。
从 12c 开始,动态采样也可以由其他新功能触发 "Adaptive execution plans"。例如,在列上缺少直方图的情况下。
通常这是 DBA 需要处理的相当复杂的事情。有多种方法可以修复 "Adaptive exec plans" 或禁用它们 partially/completely.
您最好联系 Oracle 支持。
我们在查询中添加了 /*+ dynamic_sampling(0) */ 提示。它有帮助,异常消失了。
dba 告诉我们,我们的应用程序导致服务器出现问题。 有如下开头的查询:
SELECT /* DS_SVC */ /*+ dynamic_sampling(0) no_sql_tune no_monitoring
optimizer_features_enable(default) no_parallel result_cache(snapshot=3600)
OPT_ESTIMATE(@"innerQuery", TABLE, "THIS_#21", SCALE_ROWS=0.0007347778778)
*/ SUM(C1) FROM ...
他们使服务器崩溃,我们收到 ORA-12537。 我们正在使用 NHibernate,但我相当确定这些查询不是由我们的应用程序生成的。这些查询在业务逻辑中没有任何意义,它们是一些随机连接。我们没有 sql 跟踪权限,但在 dba 给我们的日志中,这些查询是在我们的模块名称下执行的。 我搜索了一下,发现 DS_SVC 是对 Oracle12 在动态采样中使用的一些服务查询的注释。
我们的查询并不十分复杂,有几个 rownum 限制为 1000 的左连接。
所以问题是 - 我可以说那些 DS_SVC 查询是 dba 方面的问题吗?如果是这样,我在哪里可以获得一些文档来证明这一点?
看起来像是 12c 的错误。看看改变这个是否有帮助。也可以咨询Oracle支持。
ALTER SESSION SET “_fix_control”=’7452863:0′
https://www.pythian.com/blog/performance-problems-with-dynamic-statistics-in-oracle-12c/
DYNAMIC_SAMPLING hint 用于让CBO收集 运行 时间内的基数。
Looks like algorithm has been changed in 12c and dynamic sampling is triggered in a broader set of use cases. This behavior can be disabled at statement, session or system level using the fix control for the bug 7452863. For example, ALTER SESSION SET “_fix_control”=’7452863:0′;
这些查询是由优化器本身生成的。该功能称为 "Dynamic sampling"。在 11g 之前,默认情况下仅在表上没有统计信息时使用。
从 12c 开始,动态采样也可以由其他新功能触发 "Adaptive execution plans"。例如,在列上缺少直方图的情况下。
通常这是 DBA 需要处理的相当复杂的事情。有多种方法可以修复 "Adaptive exec plans" 或禁用它们 partially/completely.
您最好联系 Oracle 支持。
我们在查询中添加了 /*+ dynamic_sampling(0) */ 提示。它有帮助,异常消失了。