第一天
OceanBase 数据库主要通过锁机制、多版本并发控制(MVCC)以及事务隔离级别这三大核心机制来控制事务的并发执行,确保数据库的 ACID 特性。
以下是这些机制的具体说明:
1. 锁机制(Lock)
OceanBase 实现了表锁和行锁两级锁体系,以实现对 DML 和 DDL 操作的并发控制。
- 行级锁:用于锁定单个行。在更新数据时,行锁是互斥的,确保同一行数据不会被多个事务同时修改。
- 表级锁:用于锁定整个表。表锁设有不同的等级,DML 操作(SELECT 除外)会在表上加相容的表锁,而 DDL 操作通常会加排他的互斥表锁。
2. 多版本并发控制(MVCC)
MVCC 是一种提高并发性能的关键技术,它允许多个用户同时访问数据而不会产生冲突。
- 读不加锁:MVCC 通过存储数据的多个版本,利用事务的提交版本号和读版本号实现一致性快照读。
- 避免读写冲突:在读取数据时不需要加锁,因此避免了锁竞争,使得写事务和读事务可以并行执行。
- 数据组织:增量数据在写内存中以 MemTable 形式组织,其中存储了指向 MVCCRow(记录的多版本数据)的指针。
3. 事务隔离级别(Isolation Level)
隔离级别定义了事务并发执行时相互干扰的程度。OceanBase 目前支持标准中的三种隔离级别:
- 读已提交(Read Committed):查询只能看到开始前已提交的数据,这是默认级别,但无法防止不可重复读和幻读。
- 可重复读(Repeatable Read):确保事务内多次读取同一批数据是一致的(仅 MySQL 模式支持)。
- 可串行化(Serializable):最严格的级别,事务看起来像是按顺序串行执行的,可以防止脏读、不可重复读和幻读。
4. 分布式环境下的支撑机制
为了在多节点无共享架构下实现上述并发控制,OceanBase 还依赖以下机制:
- 全局时间戳服务(GTS):为每个事务分配全局唯一、单调递增的时间戳,确保分布式环境下事务提交顺序的一致性,并配合 MVCC 保证数据读取的正确性。
- 两阶段提交(2PC):将事务提交分为准备和提交两个阶段,确保跨多日志流或多节点的分布式事务能够原子性地完成。
- Paxos 一致性协议:利用 Paxos 协议进行多副本间的日志同步,支持日志乱序同步,从而提升了事务的执行并发能力。