Oracle数据库Library cache lock阻塞问题排查
Oracle数据库Library cache lock阻塞问题排查
- 库缓存锁的常见场景
- 排查方法一:Systemstate分析
- 排查方法二:检查X$KGLLK表
在某些情况下,可能会出现会话挂起并等待库缓存锁(Library cache lock)的情况。
库缓存锁的常见场景
- DML操作挂起:由于所访问的表正在被修改(如执行
ALTER TABLE
),导致DML操作挂起。这种情况的持续时间可能很长,具体取决于表的大小和修改类型(例如,对一个包含数千条记录的表执行ALTER TABLE x MODIFY (col1 CHAR(200))
)。
在这种情况下,
V$LOCK
会显示执行ALTER TABLE
的会话对该表对象持有排他DML队列锁(LMODE=6
,TYPE=TM
,其中ID1
为表的OBJECT_ID
)。但等待的会话不会出现在V$LOCK
中。因此,在存在大量并发会话的环境中,仅通过V$LOCK
的信息不足以追踪到阻塞您操作的“罪魁祸首”。
- 包编译挂起:如果有用户正在执行某个包中定义的过程或函数,那么对该包的编译会因等待库缓存锁和库缓存Pin而挂起。
排查方法一:Systemstate分析
系统状态事件(Systemstate event)会生成一个跟踪文件(trace fi