我们告诉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方面是个问题吗?如果是这样,我在哪里可以获得一些文件来证明它?
答案 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。它有所帮助,例外消失了。