关于强制游标共享的问题.

[复制链接]
查看11 | 回复9 | 2005-11-26 03:00:34 | 显示全部楼层 |阅读模式
9i 中既然可以使用SIMILAR重用共享SQL池中先前分析过的命令。为什么不把它(SIMILAR)设成默认选项,而还是EXACT,另外其他的两个FORCE,和EXACT;我觉得使用它们也没有什么好处。ORACLE既然保留有这两个选项,就一定有他的道理。有哪位老兄讲讲这两个选项通常什么时候使用。
回复

使用道具 举报

千问 | 2005-11-26 03:00:34 | 显示全部楼层
http://blog.csdn.net/biti_rainy/ ... cle_20040712_3.aspx
回复

使用道具 举报

千问 | 2005-11-26 03:00:34 | 显示全部楼层
最初由 biti_rainy 发布
[B]http://blog.csdn.net/biti_rainy/ ... cle_20040712_3.aspx [/B]

谢谢,我先研究研究你的大作
回复

使用道具 举报

千问 | 2005-11-26 03:00:34 | 显示全部楼层
最初由 biti_rainy 发布
[B]http://blog.csdn.net/biti_rainy/ ... cle_20040712_3.aspx [/B]

看完了你的文章,有几点问题请教:
1。如前面我所提的,既然SIMILAR优点那么多,那就更应该设为默认选项才是。不知ORACLE为何不把它设为默认。
2。我把一个表解析过后,再执行查看硬解析后,使用相似查询,硬解析依旧。cursor_sharing = similar;已经设置
如下:
analyze table area_def compute statistics for table for columns area_code
select name,value from v$sysstat where name like '%parse%';
parse time cpu
55918
parse time elapsed
28359
parse count (total)
6165158
parse count (hard)
14349
parse count (failures)
358
select count(rowid) from area_def t where area_code = '025';
parse time cpu
55919
parse time elapsed
28360
parse count (total)
6165192
parse count (hard)
14351
parse count (failures)
358
select count(rowid) from area_def t where area_code = '0512';
parse time cpu
55921
parse time elapsed
28360
parse count (total)
6165268
parse count (hard)
14351
parse count (failures)
358
硬解析没变。
select sql_text,child_number from v$sql where sql_text like 'select count(rowid) from area_def t where%';
select count(rowid) from area_def t where area_code = :"SYS_B_0"
0
你在文章结尾时说:“存在object_id的 histograms ,则每次是不同的值 的时候都产生硬解析 ,若不存在 histograms ,则不产生硬解析 。”这个 histograms 不知是什么意思,望指教。我的这个表分析过了,怎么没有histograms ?
回复

使用道具 举报

千问 | 2005-11-26 03:00:34 | 显示全部楼层
顶上去!请rainy斑竹,继续关注下,histograms是什么概念,v$sql_text.child_number 是0和1分别代表什么?
我的理解:
1,在表无统计信息的时候,similar就相当于force的概念,所有类似的语句都采用强制绑定变量,因为此时ORACLE无法通过统计信息确定最优的执行计划,这时候ORACLE只能去减少硬分析数,只是它唯一能做的好事;
2,当表存在统计信息的时候,similar就相当于exact了,对已被执行过的完全相同的SQL不再硬解析,不完全相同的重新硬解析。这里由于存在统计信息,可以在SQL被执行前知道数据范围,ORACLE考虑的是执行计划是否正确的问题,这是它要做的。ORACLE抛弃了SQL代码的重用。
那就得出个疑问:oracle偏向于执行计划的正确性的好处大于绑定变量的使用得到的好处?采用绑定变量的SQL,在执行前是无法确定数据范围的。
以上理解有不正确的地方请帮助指正下,感觉越想越糊涂了。
回复

使用道具 举报

千问 | 2005-11-26 03:00:34 | 显示全部楼层
最初由 小新 发布
[B]顶上去!请rainy斑竹,继续关注下,histograms是什么概念,v$sql_text.child_number 是0和1分别代表什么?
我的理解:
1,在表无统计信息的时候,similar就相当于force的概念,所有类似的语句都采用强制绑定变量,因为此时ORACLE无法通过统计信息确定最优的执行计划,这时候ORACLE只能去减少硬分析数,只是它唯一能做的好事;
2,当表存在统计信息的时候,similar就相当于exact了,对已被执行过的完全相同的SQL不再硬解析,不完全相同的重新硬解析。这里由于存在统计信息,可以在SQL被执行前知道数据范围,ORACLE考虑的是执行计划是否正确的问题,这是它要做的。ORACLE抛弃了SQL代码的重用。
那就得出个疑问:oracle偏向于执行计划的正确性的好处大于绑定变量的使用得到的好处?采用绑定变量的SQL,在执行前是无法确定数据范围的。
以上理解有不正确的地方请帮助指正下,感觉越想越糊涂了。 [/B]

我也是这样理解的,但是我上面的例子是给出的结果确不一样。我把表分析后, 相似SQL还是硬解析不变。参见我的上例,迷茫。怎么回事呢?
回复

使用道具 举报

千问 | 2005-11-26 03:00:34 | 显示全部楼层
别让它沉了,除非斑竹来回!不然让它置顶!
回复

使用道具 举报

千问 | 2005-11-26 03:00:34 | 显示全部楼层
最初由 小新 发布
[B]顶上去!请rainy斑竹,继续关注下,histograms是什么概念,v$sql_text.child_number 是0和1分别代表什么?
我的理解:
1,在表无统计信息的时候,similar就相当于force的概念,所有类似的语句都采用强制绑定变量,因为此时ORACLE无法通过统计信息确定最优的执行计划,这时候ORACLE只能去减少硬分析数,只是它唯一能做的好事;
2,当表存在统计信息的时候,similar就相当于exact了,对已被执行过的完全相同的SQL不再硬解析,不完全相同的重新硬解析。这里由于存在统计信息,可以在SQL被执行前知道数据范围,ORACLE考虑的是执行计划是否正确的问题,这是它要做的。ORACLE抛弃了SQL代码的重用。
那就得出个疑问:oracle偏向于执行计划的正确性的好处大于绑定变量的使用得到的好处?采用绑定变量的SQL,在执行前是无法确定数据范围的。
以上理解有不正确的地方请帮助指正下,感觉越想越糊涂了。 [/B]


从 oracle 920 开始,bindsql 在第一次解析的时候,会去 窥视var 的值,以决定执行计划,然后以后的相同sql就重用这个执行计划,直到该sql失效。
也就是说第一次解析的时候的 值 很关键,这个特性,也是缺陷很严重
回复

使用道具 举报

千问 | 2005-11-26 03:00:34 | 显示全部楼层
想ORACLE,还是使用EXACT作为默认可能是延续原来的设置。先不管它了。
BITI 继续剩下的问题。“histograms是什么概念,v$sql_text.child_number 是0和1分别代表什么?” 。谢谢先
回复

使用道具 举报

千问 | 2005-11-26 03:00:34 | 显示全部楼层
最初由 biti_rainy 发布
[B]

从 oracle 920 开始,bindsql 在第一次解析的时候,会去 窥视var 的值,以决定执行计划,然后以后的相同sql就重用这个执行计划,直到该sql失效。
也就是说第一次解析的时候的 值 很关键,这个特性,也是缺陷很严重 [/B]


rainy你终于出现了!
对于920感觉既然能在第一次执行的时候确定最优,那么以后就没有太大问题。
关键是920以前的,从ORACLE的看法一个执行计划的好坏可能比硬解析更重要。那么如果使用绑定变量造成执行计划不是最优,那么情况比不使用绑定变量变得更糟。好象9以前没有similar,只有force\exact,对于性能报告中的硬解析过多,还需要仔细分析,不能就说硬解析太多,没有使用绑定变量,就催用户使用绑定变量喽?
RAINY:“继续关注下,histograms是什么概念,v$sql_text.child_number 是0和1分别代表什么?”
能帮先解决下吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行