在 OceanBase 中,同一个事务操作的多个分区可能位于不同的 OBServer,底层通过两阶段提交协议处理分布式事务。分为如下几种情况:
- 单分区事务
和传统的关系数据库一样,属于单机事务,不需要走两阶段提交协议。
- 单机多分区事务
需要走两阶段提交协议,且针对单机做了专门的优化。
- 多机多分区事务
需要走完整的两阶段提交协议。标准的两阶段协议分为 Prepare 和 Commit/Abort 阶段两个阶段。对于多机多分区事务,需要等到Commit/Abort 执行完成后才能应答客户端事务的最终结果;对于单机多分区事务,只需要等到 Prepare 执行完成后即可应答客户端事务的最终结果,从而降低单机多分区事务的延时。
OceanBase 采用多版本并发技术(MVCC)实现并发控制,读事务和写事务之间互不影响。如果读请求只涉及一个分区或者单台 OBServer 的多个分区,那么,只需要读取该 OBServer 上某个时间点的快照即可;如果读请求涉及到多台 OBServer 的多个分区,那么,需要执行分布式快照读。