Oracle锁-OWI体系中的认识

    锁的名称与资源的名称是相同的,如TM锁保护TM(table)资源,TX锁保护TX(transaction资源),US锁保护US(Undo Segment)资源。
    普通锁因为没有特定的结构体,即Enqueue结构,没法通过v$lock等观察。只能通过v$session_wait等看等待时间来观察是否发生了争用。








select chr(bitand(&&P1, -16777216) / 16777215) ||
       chr(bitand(&&P1, 16711680) / 65555) "name",
       bitand(P1, 65555) "mode"
  from dual;

row cache lock
一般与sequence上没有使用cache值有关。通过这个sql确认下。
select * from DBA_SEQUENCES t where cache_size<2;

Sequence引起的row cache lock.mht


buffer lock锁争用能通过buffer busy waits与read by other session事件观察
也就是说这两种等待事件,并不是闩锁的争用?

对于同样library cache lock

引用eygle地描述:

Oracle使用两种数据结构来进行shared pool的并发控制:lock 和 pin.
Lock比pin具有更高的级别.

Lock在handle上获得,在pin一个对象之前,必须首先获得该handle的锁定.
锁定主要有三种模式: Null,share,Exclusive.
在读取访问对象时,通常需要获取Null(空)模式以及share(共享)模式的锁定.
在修改对象时,需要获得Exclusive(排他)锁定.

在锁定了Library Cache对象以后,一个进程在访问之前必须pin该对象.
同样pin有三种模式,Null,shared和exclusive.
只读模式时获得共享pin,修改模式获得排他pin.

总结:先lock 再pin 嘿嘿






作者:f88520402 发表于2013-12-13 21:46:25 原文链接
阅读:96 评论:0 查看评论

你可能感兴趣的:(oracle,体系,owi)