oracle – CURSOR_SHARING,Bind Variable Peeking和直方图之间的
我试图确保我对CURSOR_SHARING,绑定变量,绑定变量窥视和直方图之间的关系有很好的了解,因为大多数来源涵盖这些主题是不同的部分.
好的,所以这里是我收集到目前为止,如果我有任何错误,请自由太过正确我: CURSOR_SHARING 1. = EXACT(默认) > 1.1.如果SQL语句使用文字:优化程序将为每个文字组合生成一个新的执行计划 – 优化程序将不会用绑定替换文字.为每个文字组合生成一个新的父光标. 2. = FORCE 3. =类似 问题: >从我的理解来看,没有使用CUSOR_SHARING = EXACT使用bind-variables(1.2)编写SQL语句导致与设置CURSOR_SHARING = FORCE(2.1)完全相同的结果?在这两种情况下,优化器只会在第一次运行时窥视绑定变量来生成执行计划,然后重新使用该计划,而不管后续运行中绑定变量的值如何.如果是这样,那么为什么大多数来源建议使用绑定变量?这似乎可能会对性能产生重大影响. 希望我现在不是太远,但如果我犯了错误,请纠正我的意见 谢谢! 作者:BYS2于2011年12月20日12:11 PM >(a)使用FORCE和(b)自己使用EXACT和编码绑定变量之间的区别在于,在后一种情况下,您可以控制何时使用绑定变量.因此,如果您可以看到在特定情况下,绑定变量会损害性能,或者不需要,您可以更改该查询.用FORCE,你被卡住了.建议使用绑定变量进行OLTP类型查询的原因是解析是一个高度序列化的过程,可能会成为一个巨大的瓶颈.在OLTP系统中,您倾向于看到大量的查询应始终使用与不同值相同的执行计划,所以一直重新解析它们是浪费的.任何好的来源还建议您考虑什么时候不使用绑定变量 – 例如,如果您只有几个可能出现在查询中的特定位置的值,并且这些值中的一个或多个可能受益于不同的执行计划,总体来说可能会更好地使用文字,因为您可以解析每个变体一次,然后重新使用缓存的计划.(使用绑定变量的另一个好处是它使您不太可以使用SQL注入.) 2&在为查询创建执行计划时,通常使用直方图,而且在更多的方面比显而易见.是的,在标准绑定变量窥视EXACT设置的情况下,优化器在确定执行计划时使用直方图(或至少可能).这可能是一件好事,也可能是一件坏事,这取决于你的束缚和什么特定的价值.我想你的消息来源是关于直方??图的点,而SIMILAR设置是在这种情况下,直方图的存在是导致新的执行计划被创建的触发器之一. (我强烈建议乔纳森·刘易斯的“基于成本的Oracle基础知识”,了解您可能想要使用直方图的所有信息.) 4 ..我相信自适应光标共享本质上是以前为CURSOR_SHARING = SIMILAR实现的逻辑的增强版本.在任何情况下,优化器将考虑基于绑定变量窥视创建新的计划. SIMILAR似乎仍然存在作为选项. This post可能会提供一些更有用的信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |