多种并发控制粒度 允许数据项具有不同大小,从而定义一个数据粒度层次, 小粒度嵌入在大粒度中 可图示为一棵树C 当一事务对树中节点显式加锁,它也对该节点的所有后 裔隐含地加了同样的锁 锁粒度(封锁发生的树层次): 系粒度(树中较低层):高并发度,高锁开销 祖粒度(树中较高层)低锁开销,低并发度
多种并发控制粒度 • 允许数据项具有不同大小, 从而定义一个数据粒度层次, 小粒度嵌入在大粒度中 • 可图示为一棵树C • 当一事务对树中节点显式加锁, 它也对该节点的所有后 裔隐含地加了同样的锁. • 锁粒度 (封锁发生的树层次): – 系粒度 (树中较低层): 高并发度, 高锁开销 – 粗粒度 (树中较高层): 低锁开销, 低并发度
DB A 例中最高层是整个数据库 低层依次是aea,fle和 record
粒度层次例 例中最高层是整个数据库. 低层依次是area, file 和record
意向锁 除了S和X锁方式,还有另外三种多粒度的锁方式 意向共享(S)表示在树的低层有显式加共享锁 意向排他(X)表示在树的低层有显式加排他或共享 锁 共享及意向排他(SIX):以该节点为根的子树被显式 加共享锁,并且在子树的低层显式加排他锁 意向锁允许高层节点按S或X方式加锁而不需检查所有 后裔节点
意向锁 • 除了S 和X 锁方式, 还有另外三种多粒度的锁方式: – 意向共享 (IS): 表示在树的低层有显式加共享锁. – 意向排他 (IX):表示在树的低层有显式加排他或共享 锁 – 共享及意向排他(SIX): 以该节点为根的子树被显式 加共享锁, 并且在子树的低层显式加排他锁. • 意向锁允许高层节点按S或X方式加锁而不需检查所有 后裔节点
意向锁方式的兼容性矩阵 对所有锁方式的兼容性矩阵如下: SⅨX X sⅨ√
意向锁方式的兼容性矩阵 • 对所有锁方式的兼容性矩阵如下: IS IX S S IX X IS IX S S IX X ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓
事务T可以根据下列规则来锁一个节点Q 1.必须遵守锁兼容性矩阵 2.树的根必须首先加锁,并且可以任何方式加锁 3仅当节点Q的父节点当前被T以IX或IS方式加锁时,Q才可 被T以S或IS方式加锁 4.仅当节点Q的父节点当前被以I或SX方式加锁时,Q才可 以被T以X,SIX,或I方式加锁 5仅当7先前没有对任何节点开锁时才可以对一个节点加锁 (即,G是两阶段的) 6.仅当Q的子女没有正被T加锁时,T才可以对节点Q开锁 注意锁是按从根到叶次序获得的,但是按从叶到根次序释放 的
• 事务Ti 可以根据下列规则来锁一个节点Q: 1. 必须遵守锁兼容性矩阵. 2. 树的根必须首先加锁, 并且可以任何方式加锁. 3. 仅当节点Q 的父节点当前被Ti 以IX或IS方式加锁时, Q 才可 被Ti 以S或IS方式加锁. 4. 仅当节点Q 的父节点当前被Ti 以IX或SIX方式加锁时, Q 才可 以被Ti 以X, SIX, 或IX方式加锁. 5. 仅当Ti 先前没有对任何节点开锁时才可以对一个节点加锁 (即, Ti 是两阶段的). 6. 仅当Q 的子女没有正被Ti 加锁时, Ti 才可以对节点Q 开锁. • 注意锁是按从根到叶次序获得的, 但是按从叶到根次序释放 的