您的位置:首页 > 数据库 > Oracle

今日学习Oracle心得体会

2013-09-07 21:30 225 查看
/*************breakable parse locks易碎的解析锁*******************/

1,parse lock由模式对象引用的sql或plsql语句或代码块持有

2,持有此锁的目的,如果sql或plsql引用的对象被drop or alter,以便相关的shared sql area变更为invalidate无效

(也就是说只有有了这个锁,共享池中shared sql area的sql or plsql一旦引用对象变化了,其share sql area才可以变为无效)

3,此锁不允许任何ddl操作
4,此锁产生于share pool共享池

5,解析sql会获取此锁(解析sql要查看sql所引用对象是否发生过变化,从而决定shared pool中的share sql area是否有否,否则变更为无效;这个期间要获取此锁)

6,只要针对sql的share sql area在共享池,就要持此锁,注意是针对sql的share sql area,二者不一回事

v$librarycache视图

scott@ORCL > desc v$librarycache;
Name Null? Type
----------------------------- ----------------------
NAMESPACE VARCHAR2(15) --存储在库缓存中的对象类型,值为SQLarea,table/procedure,body,trigger
GETS NUMBER --显示请求库缓存中的条目的次数(或语句句柄数)
GETHITS NUMBER --显示被请求的条目存在于缓存中的次数(获得的句柄数)
GETHITRATIO NUMBER --前两者之比
PINS NUMBER --位于execution阶段,显示库缓存中条目被执行的次数
PINHITS NUMBER --位于execution阶段,显示条目已经在库缓存中之后被执行的次数
PINHITRATIO NUMBER --前两者之比
RELOADS NUMBER --显示条目因过时或无效时在库缓存中被重载的次数
INVALIDATIONS NUMBER --由于对象被修改导致所有参照该对象的执行计划无效的次数,需要被再次解析
DLM_LOCK_REQUESTS NUMBER
DLM_PIN_REQUESTS NUMBER
DLM_PIN_RELEASES NUMBER
DLM_INVALIDATION_REQUESTS NUMBER
DLM_INVALIDATIONS NUMBER

get表示请求条目或对象、获得对象句柄;
pin根据句柄找到实际对象并执行,但对象内容可能因为老化而pin不到所以出现reload;
一个session需要使用一个object时,如果是初次使用,则必然是先get然后pin并维护这个object的句柄。下次再使用这个object时,因为
已经维护该句柄,所以直接pin而没有了get过程。如果对象老化则移除共享池,再次请求则会出现reload。 www.2cto.com
由上面所列出的字段可知,v$librarycache视图可以用来监控librarycache的活动情况。
重点关注字段
RELOADS列:表示对象被重新加载的次数,理论上该值应该接近于零。过大是由于对象无效或librarypool过小被换出。
INVALIDATIONS:列表示对象失效的次数,对象失效后,需要被再次解析。
GETHITRATIO:该列值过低,表明过多的对象被换出内存。
GETPINRATIO:该列值过低,表明会话没有多次执行相同的游标,即使对象被不同的会话共享或会话没有找到共享的游标。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: