oracle – CURSOR_SHARING,Bind Variable Peeking和直方图之间的关系

前端之家收集整理的这篇文章主要介绍了oracle – CURSOR_SHARING,Bind Variable Peeking和直方图之间的关系前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图确保我对CURSOR_SHARING,绑定变量,绑定变量窥视和直方图之间的关系有很好的了解,因为大多数来源涵盖这些主题是不同的部分.

好的,所以这里是我收集到目前为止,如果我有任何错误,请自由太过正确我:

CURSOR_SHARING

1. = EXACT(默认)

> 1.1.如果sql语句使用文字:优化程序将为每个文字组合生成一个新的执行计划 – 优化程序将不会用绑定替换文字.为每个文字组合生成一个新的父光标.
> 1.2.如果sql语句使用绑定变量:首次运行该状态时,优化器将会窥视绑定变量的值,并使用这些特定值来生成一个执行计划 – 所有这些绑定变量的所有未来语句都将使用相同的计划(甚至如果计划对于绑定变量的其他值是次优的).

2. = FORCE
> 2.1.优化器将用绑定替换所有文字,并且基本上将使用与场景1.2相同的算法

3. =类似
> 3.1.没有直方图:优化器用绑定替换所有文字 – >与1.2和2.1相同的最终效果
> 3.2.使用直方图:optmizer用绑定替换所有文字,但是在绑定变量上查看语句是否运行(与第一次运行相反),以查看是否存在绑定的特定值的更优化的执行计划变量(基于直方图统计).因此,为优化器遇到的绑定变量的每个不同值有效地创建一个新的子游标.

问题:

>从我的理解来看,没有使用CUSOR_SHARING = EXACT使用bind-variables(1.2)编写sql语句导致与设置CURSOR_SHARING = FORCE(2.1)完全相同的结果?在这两种情况下,优化器只会在第一次运行时窥视绑定变量来生成执行计划,然后重新使用该计划,而不管后续运行中绑定变量的值如何.如果是这样,那么为什么大多数来源建议使用绑定变量?这似乎可能会对性能产生重大影响.
>在初始绑定变量中使用的直方图是否窥视1.2和2.1?如同第一次运行sql语句并且优化器在绑定变量上看到的是否使用直方图(如果有的话)来确定是否使用全表扫描或索引扫描? “Oracle数据库11g,性能调优配方”似乎表明直方图仅在CURSOR_SHARING = SIMILAR时有关,但其他一些来源表示直方图也用于所有其他CURSOR_SHARING设置.
>在1.1中,优化器会使用直方图来确定最佳的执行计划吗?基本上我只想知道直方图何时被使用.是只有当CURSOR_SHARING = SIMILAR或其他CURSOR_SHARING设置好吗?
>适应光标共享 – 仅当存在绑定变量(从用户查询或系统生成(通过文字替换))时,此功能才会发生.因此,它只发生在1.2,2.1,3.1和3.2中?但由于SIMILAR已被弃用,这是否意味着ACS仅发生在1.2和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可能会提供一些更有用的信息.

猜你在找的Oracle相关文章