DML LOCK兼容性表的一个比喻

今天看到ZALBB和jeffli73讨论的文章《oracle多粒度封锁机制研究》,觉得比喻的很有意思,不过jeffli73在坛子上只是比喻了单粒度的封锁机制,没继续比喻多粒度的封锁,这里,我狗尾续貂,按照jeffli73的意思也打个比方吧。

一个艺术中心占地很广(我们把它类比做数据库),有许多独立的建筑-艺术馆(艺术馆相当于数据库中的“表”),各个艺术馆中又有许多展馆(相当于表中的记录),为了使各个艺术馆得到有效的管理,对进出艺术馆的人员进行了分类并对他们各自的行为做了如下限制:

到时我会守在艺术馆的门口,对于:

题外话:从10G R2开始select for update已经改成了RX的模式,即lmode为3,这应该说是一个改进,因为从之前的文档上看,select for update是RS锁,可以兼容S锁,前提条件是*Yes, if no conflicting row locks are held by another transaction. Otherwise, waits occur.但是在实际的测试中,如果我select * from table where 1=2 for udpate,这样的不锁任何数据的RS锁,也会让lock table in share mode阻塞。因此,现实的情况select for update为RX锁的情况吻合了,所以10G R2这个版本被改成RX锁,算是修正了。

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据