【问题标题】:IS (Intentional Shared) lockIS(有意共享)锁
【发布时间】:2009-11-25 02:47:57
【问题描述】:

谁能给出一个使用有意共享锁的数据库事务的简单示例?如果是这样,则使用有意的排他锁。

【问题讨论】:

  • 没有。只是我不明白如何实现这个概念。我清楚地了解共享锁和排他锁,但看不到“有意”锁的必要性。举个例子会有帮助。

标签: sql oracle transactions


【解决方案1】:

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

由于锁管理器显然无法知道被锁对象的结构细节,所以引入了意图锁。第一个事务将在 P1 上放置一个 IS 锁,然后在 R1 上放置一个 S 锁。当第二个事务在 P1 上请求 X-lock 时,它会与第一个事务放置的 IS-lock 冲突。

【讨论】:

  • 所以意图锁不是锁,而是定义某些数据是否可以锁定的方法,如果可以,如何锁定?作为一个自上而下的树,粒度长袍下三者为大。
  • 从锁管理器的角度来看,锁有 4 种类型:IS、IX、S、X(忽略 U 锁和其他类型)。 LM 将它们都理解为锁,并具有使 IS-IX 和 IX-IX 兼容的兼容性矩阵(但不兼容 S-IX、X-IS 和 X-IX)。 “访问者”(了解层次结构树的结构)将在树中导航,沿着层次结构请求 I 锁,直到找到它请求 S 或 X 锁的实际感兴趣的项目。跨度>
  • 您最好将 I 锁视为面包屑。你把它们留在后面,这样其他人就不会剪断你站立的树枝。如果格蕾特曾经爬上一棵树,那就是……有点。
猜你喜欢
  • 2016-04-09
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
相关资源
最近更新 更多