love wife & love life —Roger的Oracle&MySQL技术博客

Phone:18180207355 提供专业Oracle&MySQL数据恢复、性能优化、迁移升级、紧急救援等服务

dml with lmode=6 ?

本站文章除注明转载外,均为本站原创: 转载自love wife & love life —Roger的Oracle&MySQL技术博客

本文链接地址: dml with lmode=6 ?

今天跟09年的一个同事聊天,他去年去原厂了,问他在干吗,他说在处理一个客户的故障,
说是dml操作产生TM锁,而且lmode是6.
我们都知道正常情况下,dml产生的tm lmode应该是2或3,当然老版本的db有一些差异,详见下文:

——– no index test

针对子表外键列上无index的情况针对dml操作,产生的TM lmode为3的lock,
而且是子表和父表都会产生,这就非常不好了,容易产生死锁,这就是为什么
针对外键列需要建index的原因,下面来看看有index的情况。

———with index

可以看到,针对父表的操作,不会在子表上产生锁,针对子表的操作会在
子表和父表都产生锁,但是有点不同,父表是lmode 2,子表是lmode 3,而无index的情况是:
子表和父表都是tm lmode 3.

mos上一篇文档描述了针对该情况的改变:

上面我还是还是没有模拟出产生TM lmode=6的情况,下面继续:

正常情况下,对于TM 级别产生lmode 6的锁,那么肯定是针对该表有DDL比如alter table或其他,
这里我模拟另外一种:

我们可以看到针对parallel dml 会产生TM lmode 为6的lock。

Leave a Reply

You must be logged in to post a comment.