latch(二)
续上一节
latch(一)自译文
http://space.itpub.net/9240380/viewspace-631161 cursor:mutex S
我们尝试以共享模式获取在父cursor上面的一个mutex或者v$sqlstat bucket
这个mutex是in flux(实际就是有些人正以共享模式持有它),因此我们要等待只到拥有者完成它的共享持有
适用于:检查父cursor或者查询v$sqlstat bucket
cursor:mutex X
我们尝试以独有模式获取在父cursor上面的一个mutex或者v$sqlstat bucket
有些人已经以未兼容模式持有mutex
有些人指:
已经以x 模式(独有)占用mutex
或者以S 模式(共享)有好多占用者持有mutex
适用于:在父cursor下加载新的子cursor,修改v$sqlstat bucket,更改(新)绑定抓取的数据
cursor:pin S
我们尝试以共享模式pin(固定)cursor(比如要执行)
用于固定住子cursor的mutex叫:in flux,有些人正在固定已经固定的cursor
我们必须等待直到其它会话完成它们的固定(pin)请求
cursor:pin X
我们尝试以独占模式pin(固定)cursor,但其它人已经用非兼容模式固定(pin)了这个cursor
或是一个会话已经以x 模式固定了cursor或者多个会话以共享模式固定了它
cursor:pin S wait on X
我们尝试以共享模式固定一个cursor,但已有一些人以独有模式固定了它
适用于:其它会话正在加载用于解析(子游标)
在11g中,大多数library cache latches已被library cache hash buckets的mutexes 代替
共有131072个 KGL hash buckets
每个buckets被独立的mutex保护
虚假竞争存在的机会更少
library cache:mutex S
尝试以共享模式获取library cache hash bucket的一个mutex
这个mutex已被非兼容模式占用
library cache:mutex X
尝试以独有模式获取library cache hash bucket的一个mutex
这个mutex已被非兼容模式占用
附上一段cursor and library cache mutex content detail,供参考
SQL> @sed mutex
EVENT_NAME PARAMETER1 PARAMETER2 PARAMETER3
------------------------- --------------- --------------- ------------
cursor: mutex S idn value where|sleeps
cursor: mutex X idn value where|sleeps
cursor: pin S idn value where|sleeps
cursor: pin S wait on X idn value where|sleeps
cursor: pin X idn value where|sleeps
library cache: mutex S idn value where
library cache: mutex X idn value wher
idn=library cache object hash value(cursor:*events)
idn=library cache hash bucket number(library cache:events)
values=
每个字(2或4个bytes)的低bytes - 被共享模式引用的mutex数
每个字(2或4个bytes)的高bytes -专用模式占用者的sid
where=到x$mutex_sleep.locatin_id的地图索引或叫坐标
_spin_count
latch的spin计数--在放弃或睡眠前等待的次数
经常被混淆哟
如果没有其它问题并且系统有充足的cpu资源,应该增加
_latch_classes 和_latch_class_x
可以给不同的latches配置不同的spin 计数
select indx,spin,yield,waittime from x$ksllclass
_kgx_spin_count
在11g以后,对于KGX mutex的固定计数
修复了固定原因,你就不需要调节spin count了,哈哈
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-631300/
,如需转载,请注明出处,否则将追究法律责任。