数据库意向锁——数据库考试复习

前言

如果没有多粒度锁,就不会产生意向锁。在介绍意向锁之前先引入两个概念显式封锁和隐式封锁。
显式封锁:直接加到数据对象上的封锁,如给某个表加写锁,这个写锁作用在这个表上。
隐式封锁:该数据对象没有独立加锁,是由于其上级结点加锁而使该数据对象加上了锁。如果某个表上加了读锁,则默认该表每个元祖均有隐式读锁。
假如事务T要给某个表要加一个读锁,首先要判断该表是否目前是否有写锁(包括显示、隐式封锁),如果该表有写锁,则需要等待。如果该表上没有写锁,因为当前商用的数据库管理系统都包含行级锁和表级锁(是多粒度锁),还需逐个判断该表中每个元祖上是否有写锁,如果有写锁,则还需等待。换句话,在多粒度锁的情况下,每次加锁时,不仅要判断所加资源上是否有锁,而且还需判断下级单元是否包含锁,考虑到判断下级资源是否加有写锁是非常耗资源,产生了意向锁

意向锁概念

意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。如:给表中某个元祖加写锁时,则给表上加意向写锁。
假如事务T要给某个表要加一个读锁,仅需要检测该表上是否有写锁和意向写锁即可,无需每个元祖去检测是否包含写锁,提高了性能。

意向锁种类

意向共享锁(Intent Share Lock,简称IS锁):如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。如果某表上有IS锁,则这个表可以继续加S、IS、IX和SIX类型的锁。
意向排它锁(Intent Exclusive Lock,简称IX锁):如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。如果某表上有IX锁,则这个表可以继续加IS和IX类型的锁。
共享意向排它锁(Share Intent Exclusive Lock,简称SIX锁):如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX = S + IX。如:对某个表加SIX锁,则表示该事务要读整个表(所以要对该表加S锁),同时会更新个别元组(所以要对该表加IX锁)。如果某表上有SIX锁,则这个表可以继续加IS类型的锁。

数据锁的相容矩阵

S:读锁、X写锁、IS意向共享锁、IX锁意向排它锁、SIX共享意向排它锁,Y代表相容请求,N代表不相容请求
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值