当处理enqueue等待时,熟记这些要点:
1 Enqueues 是应用到数据库对象的locks.与latch(应用于SGA内存)不同.
2 Enqueues 是由应用程序发起,具有事务性.(具体参见下文)
3 Oracle session 正在等候获取一个特定的enqueue. enqueue的名字和mode被记录在P1参数里.
针对不同类型的enqueue竞争应采用不同的方式解决.
4 一直到Oracle 9i,enqueue wait event 代表所有enqueue waits;从Oracle 10g开始enqueue waits被分类定义(下文详细介绍).
What Is an Enqueue?
一个enqueue是什么由具体环境决定. 如果它被看成是动词,则表示将一个lock请求置于一个队列的动作.如果被看成是名词,它表示一个特定的lock,比如TX事务enqueue.
Enqueues 是一种非常精密的锁定机制,用来管理访问数据库共享资源,比如(objects, background jobs, and redo threads).Oracle使用enqueues出于两个目的: 第一,当enqueue为不兼容模式(mode)时,enqueues防止并发sessions共享数据库资源. 第二,当enqueue为兼容模式时,enqueues容许并发sessions共享数据库资源.
当session A请求一个数据库对象上的锁资源时,
如果被请求的锁模式为不兼容模式,且该数据库对象已经被另一个session 以不兼容模式锁持有,则session A将它的锁请求放置于一个队列里并且按顺序等待被唤起.这个事件被称为enqueue wait.
Enqueue waits 除了包括buffer locks (discussed in the “Buffer Busy Waits” section), library cache locks, row cache locks, and PCM (Parallel Cache Management) locks,也是对各种local locks的等待.
What Is an Enqueue Resource?
An enqueue resource是由于受到一个enqueue lock的数据库资源.
Oracle通过内部数组结构进行管理.
通过X$KSQRS (kernel service enqueue resource) or V$RESOURCE 视图可以看到具体条目.
SQL> select * from v$resource;
ADDR TY ID1 ID2
-------- -- ---------- ----------
6D304434 XR 4 0
6D304594 CF 0 0
6D3046F4 RT 1 0
6D30474C RS 25 1
6D304904 MR 3 0
6D30495C MR 4 0
6D3049B4 MR 5 0
6D304B24 MR 1 0
6D304B7C MR 2 0
6D304BD4 MR 201 0
6D305634 TA 6 1
ADDR TY ID1 ID2
-------- -- ---------- ----------
6D305B5C PW 1 0
6D3069DC TS 3 1
已选择13行。
SQL>
根据以上查询输出,我们可以看到enqueue resource structure 由lock type和两个参数组成. Oracle用两个字符符号例如(TX, TM, TS, MR, RT, etc)表示lock type. ID1,ID2两个参数由于lock type的不同所以具有不同含义.
具体可以参见<>第六章 Enqueue部分 Table6-3.
在Oracle10g之前,ID1和ID2对于不同类型lock的含义并未公开.
在Oracle10g中可以通过如下查询轻松得到.
col name for a20
col parameter2 for a20
col parameter3 for a20
select name,parameter2,parameter3 from v$event_name
/
稍后在本文enqueue资源争用部分再对ID1与ID2作详细介绍.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/76065/viewspace-972314/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/76065/viewspace-972314/