日期:2014-05-16 浏览次数:20552 次
解析分为硬解析和软解析和软软解析,SQL语句第一次解析时必须进行硬解析
还有一种是结果集缓存—无解析,详见:结果集缓存
一句话说明硬解析与软解析的区别是:
硬解析=需要生成执行计划 软解析=不需要生成执行计划
在Oracle中存在两种类型的SQL语句,一类为DDL语句,不共享使用,也就是每次执行都需要进行硬解析。还有一类就是DML语句,会进行硬解析或软解析。
硬解析变成软解析:绑定变量
软解析变成软软解析:设置session_cached_cursors,详见本文最后。
select owner,name from v$db_object_cachewherechild_latch=1;显示library cache中那些对象被缓存,以及对象的尺寸
session_cached_cursors占用的内存:会话退出会释放,或者达到达到最大值后,最早、早少使用的会被释放。
session_cached_cursors参数的设置: --来自周亮--ORACLE DBA实战攻略。
SYS@ bys3>show parameter session_cached 11G中默认值是50
NAME TYPE VALUE
-----------------------------------------------------------------------------
session_cached_cursors integer 50
SYS@ bys3>select a.name,b.value fromv$statnamea,v$sesstat b where a.statistic#=b.statistic# and a.name in('session cursorcache hits','session cursor cache count','parse count(total)') andb.sid=(select c.sid from v$mystat c where rownum=1);
NAME VALUE
--------------------------------------------------------------------------
session cursor cachehits 32
session cursor cachecount 4
parse count(total) 43
session cursor cache count表示指定会话缓存的游标数,session_cached_cursors参数是系统当前每个会话最多能缓存的游标数。
session cursor cache count小于session_cached_cursors,不用增加session_cached_cursors大小。如相等,则有可能需要增加。
session cursor cache hits 表示从UGA中命中的次数--软软解析次数。
parse count (total)指定会话的总解析次数。
如果session cursor cache hits接近parsecount (total),无需调整session_cached_cursors。
如果session cursor cache hits远小于parsecount(total),则可能需要调整session_cached_cursors。
session_cached_cursors对所有会话生效,如果需要调优的会话占所有会话比例很小,调整意义不大。
oracle 能够重复利用执行计划的方法就是采用绑定变量。
绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样。
绑定变量只是起到占位的作用,同名的绑定变量并不意味着在它们是同样的,在传递时要考虑的是传递的值与绑定变量出现顺序的对位,而不是绑定变量的名称。
绑定变量是在通常情况下能提升效率,非正常的情况如下:
在字段(包括字段集)建有索引,且字段(集)的集的势非常大(也就是有个值在字段中出