[English]
作者:
fuyuncat
来源:
www.HelloDBA.com
我们通常知道的锁一般就是TM、TX等。但实际上Oracle有很多种类型的锁。当你的系统中发生很多enqueue等待事件时,如何定位是那种锁呢?这里介绍一种方法。
当设置过10046事件(level>=8),产生了trace文件。如果存在enqueue事件,就会看到有如下内容:
WAIT #1: nam='enqueue' ela= 910796 p1=1128857606 p2=2 p3=5
P1=1128857606,转换为十六进制就是0x43490006,0x43和0x49转换为ascii就是’C’和’I’,即为CI的enqueue事件。可以通过以下语句查询出相关数据:
select * from v$enqueue_stat where eq_type = 'CI'
再看P1中的6,对应的是V$LOCK中的LMODE。表示等待是一个exclusion模式的CI锁。再看P2、P3,对应的是V$LOCK中的D1、D2。即D1=2,表示“DBWR synchronization of SGA with control file”,D2=5,表示“Used to queue up interested clients”。