/*************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操作
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:该列值过低,表明会话没有多次执行相同的游标,即使对象被不同的会话共享或会话没有找到共享的游标。