DM8锁排查

本文探讨了LOCK_DICT_OPT0的静态DICT封锁优化策略,涉及不同环境下的适用性,以及如何检查和处理未释放的IS和IX锁。重点在于解决LOCK_DICT_OPT=2时的锁不释放问题,提供锁定模拟和会话管理建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LOCK_DICT_OPT 0 静态 DICT封锁优化,事务提交或回滚时,不真正释放表上IS锁和IX锁对象。
0:不优化; 1:单机环境优化, DSC集群环境不优化; 2:单机、集群环境都优化

存在LOCK_DICT_OPT初始化后为2的情况,导致数据库的IS锁和IX锁不释放
刚启动数据库时
select * from v$lock
在这里插入图片描述

select t.object_name from all_objects t,v$lock l where t.object_id = l.table_id
在这里插入图片描述

V$LOCK中字段IGN_FLAG表示在LOCK_DICT_OPT开启时查看锁的使用状况

所以当LOCK_DICT_OPT开启时可以通过以下SQL去查询正在使用的锁的SESS_ID和锁的类型,被上锁的表
select s.SESS_ID,L.LMODE,a.OBJECT_NAME from v l o c k l , v lock l,v lockl,vsessions s,v$trx t,ALL_OBJECTS a where l.IGN_FLAG = 0 and l.TRX_ID=t.ID and t.sess_id=s.sess_id and a.OBJECT_ID = l.TABLE_ID;

模拟:
手动加IS锁
lock table TABLE_1 in intent share mode nowait;

SQL执行后查询到的信息
在这里插入图片描述

可以根据实际情况,考虑是否杀掉这个SESSION

在这里插入图片描述

添加列失败

在刚刚的窗口操作其他SQL后查询v$SESSIONS
在这里插入图片描述

可以看出 STATE的状态时IDLE SQL也为select
但确实是这个session导致的
sp_close_session(140099484934248)

添加列成功。

LOCK_DICT_OPT=0时
刚启动集群V$LOCK中没有内容

在这里插入图片描述

此时若有内容,即为有正在使用的锁,正常处理即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值