select pc.value*100/decode(ec.value,0,1,ec.value)
from v$sysstat ec, v$sysstat pc
where ec.name='execute count'
and pc.name='parse count (total)';
其中“execute count”和“parse count (total)”分别代表什么,“pc.value*100/decode(ec.value,0,1,ec.value) ”又代表什么。、
希望详细一点,哪怕告诉我那本书里有也可以,谢谢。
再次感谢。
from v$sysstat ec, v$sysstat pc
where ec.name='execute count'
and pc.name='parse count (total)';
其中“execute count”和“parse count (total)”分别代表什么,“pc.value*100/decode(ec.value,0,1,ec.value) ”又代表什么。、
希望详细一点,哪怕告诉我那本书里有也可以,谢谢。
再次感谢。
GOOD LUCKY!
parse count (total)--- 分析次数pc.value*100/decode(ec.value,0,1,ec.value)---分析次数与执行次数的百分比每条sql第一次执行,都必须进行语法分析,形成执行路径,然后缓存在shared pool中,如果下次“同样”的sql再次被执行,则不需要做语法分析。问题是oracle如何认为是“同样“的sql。
如果sql使用常量,oracle认为是不相同的,例如:
select col1 from tab1 where a.name='333' 和
select col1 from tab1 where a.name='444' 是不同的sql
如果sql空格不一样,大小写不一样,oracle也认为是不同的,例如
select col1 from tab1 where a.name='333' 和
select col1 from tab1 where a.name='444' 是不同的sql
select Col1 from tab1 where a.name='333' 和
select col1 from tab1 where a.name='444' 是不同的sql
通用的规则是:使用绑定变量而不使用常量,同一个sql在不同的程序中书写要保持一致。这个比率说明两个问题:
1.shared pool size是否恰当(要有足够的mem来缓存大量不同的sql)
2.sql的问题(本来可以成为同样的sql变成了不同的sql)
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96536/ch3215.htm#1127407
如select * from tablename where field1=:field1与select * from tablename where field1='AA'
前者的执行效率会较高吗?
select * from tablename where field1='BA'
他们如果不有参数的话,要分析两次。
但是用参数的话,只要分析一次。减少了分析的次数