G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(上)

0 阅读2分钟

南大通用GBase 8s数据库(gbase database)解决事务并发问题,锁机制用于协调并发访问,防止多个事务同时操作数据导致的数据不一致。

GBase 8s 三种基本的锁的类型

  • 共享锁(S 锁):允许多读,禁止写,就是我们常说的读锁
    允许多个事务同时读取资源,但禁止任何事务对资源进行修改,保证数据读取的一致性。
  • 排他锁(X 锁):禁止读写,就是我们常说的写锁
    一个事务独占资源,禁止其他任何事务读取或修改资源,保证数据修改的完整性。
  • 提升锁(U 锁):修改意向,可升级
    “预防性锁” ,表示事务有修改资源的意向,允许后续升级为排他锁,以保证修改操作的原子性。该锁的目的是避免“读后改”的死锁(S → X 升级死锁)

锁的兼容矩阵

请求锁/已有锁无锁S 锁U 锁X 锁
请求 S 锁×
请求 U 锁××
请求 X 锁×××

GBase 8s 支持的锁的粒度

  • 库级锁
  • 表级锁:低并发,低开销
  • 页面锁:并发性与开销的平衡
  • 行级锁:高并发,高开销
  • index-key 锁:索引键锁,锁定索引,通过对两个索引上锁,同时锁定了这两个索引之间的索引,锁定的是一个范围区间,它不会允许其他的事务对当前索引键这个范围内进行修改操作。

封锁粒度就说明的是一次加锁所覆盖的数据的范围大小,这其实是一个在并发能力和锁管理成本之间权衡的一个结果,如果锁的粒度太大,那么它的并发能力就会很差,容易阻塞无关的事务;如果锁的粒度太小,那么带来的结果就是虽然它的并发度会变高,但是锁的数量就会非常的大,带来的锁的管理的成本就会变高。