数据库中SQL hard parse太高。耐着性子将所发现的问题SQL提交给相关人员进行修改,改为binding 的方式... 但还是有大量的SQL无法修改, 整个系统中的多版本SQL还是很多!

无奈之下,昨天只好修改 cursor_sharing 参数,从EXACT到SIMILAR
Wed Oct 10 17:25:48 2007
ALTER SYSTEM SET cursor_sharing='SIMILAR' SCOPE=BOTH;

改过之后,效果不错。
查看v$sql,发现系统会自动将固定值替换为 :"SYS_B_0" :"SYS_B_1" ... 之类的绑定变量名
SELECT * from aa where aa.a = :"SYS_B_0"
SELECT * from aa where aa.a = :"SYS_B_0" and rownum < :"SYS_B_1"

另外看到有个说法:当使用similar时,如果满足以下条件,则ORACLE还是会进行 hard parse
. 列上存在histogram
. SQL中使用到了此列作为条件,并且条件是“等于”

可是实验结果却相反??

eg.
SELECT * FROM aa WHERE aa.ID=23;
从DBA_TAB_COL_STATISTICS中查询到ID字段的统计分析数据,可是当改变ID的取值时,以上SQL仍然不会产生hard parse。
WHY???

今天(2007-10-29)知道了答案:histogram并不等于"统计分析数据"。其实ID字段上只有统计分析数据,并没有histogram,因此没有产生hard parse.


不过,最后还是提醒大家小心使用SIMILAR。一定要多查资料,弄清楚会带来哪些影响。修改后,多多留意数据库运行情况是否有异常。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9844649/viewspace-580037/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9844649/viewspace-580037/

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐