dynamic_sampling提示在oracle 12c中导致问题的查询中

时间:2016-10-20 11:19:38

标签: oracle nhibernate oracle12c

我们告诉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给我们的日志中,这些查询是在我们的模块名下执行的。 我用Google搜索并发现DS_SVC是Oracle12在动态采样中使用的一些服务查询的注释。

我们的查询并不完全复杂,左边连接与rownum限制为1000。

所以问题是 - 我可以说那些DS_SVC查询在dba方面是个问题吗?如果是这样,我在哪里可以获得一些文件来证明它?

3 个答案:

答案 0 :(得分:2)

看起来像12c错误。看看改变这有帮助。也可以询问Oracle支持。

ALTER SESSION SET “_fix_control”=’7452863:0′

https://www.pythian.com/blog/performance-problems-with-dynamic-statistics-in-oracle-12c/

DYNAMIC_SAMPLING提示用于让CBO​​收集 运行时的基数。

  

看起来算法已在12c中更改并且动态采样是   在更广泛的用例中触发。可以禁用此行为   在语句,会话或系统级别使用修复控件   bug 7452863.例如,ALTER SESSION SET   “_fix_control” =” 7452863:0;

答案 1 :(得分:2)

这些查询由优化器本身生成。该功能称为"动态采样"。直到11g,默认情况下,只有在桌子上没有统计数据时才会使用它。

自12c以来,动态采样也可以由其他新功能"自适应执行计划"触发。例如,在列上缺少直方图的情况下。

通常这是一个非常复杂的DBA处理方法。有多种方法可以解决"自适应执行计划"或部分/完全禁用它们。

您可以做的最好,就是联系Oracle支持。

答案 2 :(得分:0)

我们在查询中添加了/ * + dynamic_sampling(0)* / hint。它有所帮助,例外消失了。