2009-11-25 94 views
1

任何人都可以使用Intentional Shared锁给出一个简单的数据库事务示例吗?如果是这样,一个使用故意排他锁。IS(意向共享)锁

+0

这功课吗? – 2009-11-25 03:01:00

+0

Nop。只是我不明白如何实现这个概念。我清楚地了解共享锁和独占锁,但没有看到“故意”锁的需要。一个例子会有帮助。 – Sheldon 2009-11-25 03:11:58

回答

3

意向锁是需要的,因为锁管理器不理解锁定实体的物理结构。如果一个事务S锁定了一条记录,比如说R1,而另一个事务要求在页面上有一个X锁,那么说P1,如果R1实际上位于P1上,会发生什么?在R1被释放之前,锁管理器不应该遵守P1请求,但是为了这样做,它必须理解R1被包含在P1中。

由于锁管理器显然无法知道锁定对象的结构细节,因此引入了意向锁。第一笔交易将在P1上放置一个IS锁,然后在R1上放置一个S锁。当第二个事务请求P1上的X锁时,它将与第一个事务放置的IS锁冲突。

+0

谢谢你Remus! – Sheldon 2009-11-25 05:13:45

+0

因此,Intent锁定不是锁定的,但是定义某些数据的方法可以被锁定或不锁定,如果可以,如何锁定?作为一个自上而下的树,三个粒度更大。 – Sheldon 2009-11-25 05:15:41

+1

从锁管理器的角度来看,锁有四种类型:IS,IX,S,X(忽略U锁和其他类型)。 LM将它们全部理解为锁,并且具有兼容性矩阵,使得IS-IX和IX-IX兼容(但不是S-IX,X-IS和X-IX)。 '访问者'(理解层次结构树的结构)将在树中导航,请求在锁定状态下进行锁定,直到找到它请求S或X锁的实际利益项。 – 2009-11-25 05:22:47