漫谈OceanBase的多版本并发控制

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

OceanBase的MemTable包含两个部分:索引结构及行操作链。其中,索引结构存储行头信息,采用内存B树实现;行操作链表中存储了不同版本的修改操作,从而支持多版本并发控制。

OceanBase支持多线程并发修改,写操作拆分为两个阶段:

  • 预提交(多线程执行):事务执行线程首先锁住待更新数据行,接着,将事务中针对数据行的操作追加到该行的未提交行操作链表中,最后,往提交任务队列中加入一个提交任务。
  • 提交(单线程执行):提交线程不断地扫描并取出提交任务队列中的提交任务,将这些任务的操作日志追加到日志缓冲区中。如果日志缓冲区到达一定大小,将日志缓冲区中的数据同步到备机,同时写入主机的磁盘日志文件。操作日志写成功后,将未提交行操作链表中的cell操作追加到已提交行操作链表的末尾,释放锁并回复客户端写操作成功。

如下图所示,MemTable行操作链表包含两个部分:已提交部分和未提交部分。另外,每个事务管理结构记录了当前事务正在操作的数据行的行头,每个数据行的行头包含已提交和未提交行操作链表的头部指针。在预提交阶段,每个事务会将cell操作递加到未提交行操作链表中,并在行头保存未提交行操作链表的头部指针以及锁信息,同时,将行头信息记录到事务管理结构中;在提交阶段,根据事务管理结构中记录的行头信息找到未提交行操作链表,链接到已提交行操作链表的末尾,并释放行头记录的锁。

class ObTransExecutor
{
public:
    //处理预提交任务
    void handle_trans(void* ptask, void* pdata);
    //处理提交任务
    void handle_commit(void* ptask, void* pdata);
};

_1

obTransExecutor是UpdateServer读写事务处理的入口类,它主要包含两个方法:handle_trans以及handle_commit。其中,handle_trans处理预提交任务,handle_commit处理提交任务。handle_trans首先将写事务预提交到MemTable中,接着将写事务加入提交任务队列。提交线程不断地从提交任务队列中取出提交任务,并调用handle_commit进行处理。每个写事务会根据提交时的系统时间生成一个事务版本,读事务只会读取在它之前提交的写事务的修改操作。

如下图所示,对主键为1的商品有2个写事务,事务T1(提交版本号为
2)将商品购买人数修改为100,事务T2(提交版本号为4)将商品购买人数修改为50。那么,事务T2预提交时,T1已经提交,该商品的已提交行操作链包含一个cell:(update,购买人数,100),未提交操作链包含一个cell:(update,购买人数,50)。事务T2成功提交后,该商品的已提交行操作链将包含两个cell:(update,购买人数,100)以及(update,购买人数,50),未提交行操作链为空。对于只读事务:

  • T3:事务版本号为1,T1和T2均未提交,该行数据为空。
  • T4:事务版本号为3,T1已提交,T2未提交,读取到(update,购买人数,100)。尽管T2在T4执行过程中将购买人数修改为50,T4第二次读取时会过滤掉T2的修改操作,因而两次读取将得到相同的结果。
  • T5:事务版本号为5,T1和T2均已提交,读取到(update,购买人数,10)以及(update,购买人数,50),购买人数最终值为50。

_

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
数据库 OceanBase
OceanBase 数据库的版本信息
OceanBase 数据库的版本信息
2415 1
|
3月前
|
运维 监控 数据库
在OceanBase数据库中,obd集群版本需在线升级4.3.1.0升级至4.3.2
【8月更文挑战第14天】在OceanBase数据库中,obd集群版本需在线升级4.3.1.0升级至4.3.2
80 0
|
关系型数据库 MySQL 开发工具
使用OceanBase数据库中的ob_client mysql版本的SDK
使用OceanBase数据库中的ob_client mysql版本的SDK
191 1
|
Ubuntu 大数据 Linux
「更易用的OceanBase」| 制作OceanBase 4.0 容器版本
「更易用的OceanBase」| 制作OceanBase 4.0 容器版本
259 0
|
SQL Oracle 架构师
我与 OceanBase 的缘分,从测试新版本开始
本文作者:张霁 某股份制商业银行应用架构师,从事金融类应用研发和数据库选型等工作多年,熟练使用 OceanBase 等分布式数据库、MySQL 等集中式数据库,并已获得 OceanBase 认证的 OBCA、Oracle 认证的 OCP 等证书。
366 0
我与 OceanBase 的缘分,从测试新版本开始
|
SQL 缓存 OLAP
 OceanBase 3.2 版本产品功能升级:
 OceanBase 3.2 版本产品功能升级:
267 0
|
消息中间件 Oracle 关系型数据库
|
SQL 运维 Oracle
新功能速递 | OceanBase 云平台 3.1 版本发布啦!
OceanBase 云平台(OceanBase Cloud Platform)3.1 版本全新上线,新增五大功能,让日常运维更精准。
新功能速递 | OceanBase 云平台 3.1 版本发布啦!
|
SQL 弹性计算 Oracle
OceanBase 2.2 版本上线啦!立即申请即可免费体验
好消息!「 OceanBase 2.2 版本 」正式上线官网啦!OceanBase 2.2版本是成功支撑2019年天猫双11大促的稳定版本,同时也是用于TPC-C测试且荣登TPC-C性能榜首的版本。OceanBase 2.2版本除了在蚂蚁金服和网商银行广泛使用外,目前也在部分金融机构中使用。
OceanBase 2.2 版本上线啦!立即申请即可免费体验
|
移动开发 运维 容灾
支付宝自研数据库OceanBase亮相云栖大会 发布2.2版本核心特性和全新一体机
金融科技作为我国金融行业数字化转型升级的重要课题,在全球科技盛宴——2020云栖大会上占据了重要一席,由蚂蚁集团OceanBase CEO、金融云总经理杨冰,OceanBase研发总经理杨传辉,金融云产品总监刘昕和mPaaS产品专家杨晓亮等4位技术大咖带来了一场主题为“数字金融源动力”的专场分享,并发布OceanBase完整的平台能力,混合负载引擎,多种容灾方式,以及全新的OceanBase一体机。
支付宝自研数据库OceanBase亮相云栖大会 发布2.2版本核心特性和全新一体机