OceanBase如何获得TPC-C测试第1名?
由于TPC-C的计划原则是尽也许的“真实”回响一个OLTP体系的运行场景,我们所做的许多优化都具有普及的合用性。譬喻,对付一个高并发的OLTP体系来说,大部门的SQL哀求的耗时长短常短的,回收纯粹的C/S交互模子的效果肯定使体系的时刻挥霍在应用与数据库的频仍交互中,而行使存储进程可以大大缓解这种交互的耗时,而且加强体系对付收集发抖的免疫力,这种焦点手段对付一个漫衍式OLTP数据库是不行或缺的。 在这次的TPC-C测试中,我们回收了OceanBase 2.0版本开始支持的Oracle兼容模式,存储进程和SQL所有行使了兼容Oracle的数据范例和语法,这样做也是为了在追求极致优化的同时,确保产物迭代可以沿着通用和正规的偏向成长。 三、TPC-C基准测试之数据库事宜引擎的挑衅 OceanBase这次TPC-C测试与榜单上Oracle和DB2等其他数据库在硬件行使上有很是大的差异,OceanBase的数据库处事器行使的是204+3台型号是ecs.i2.16xlarge阿里云ECS处事器,个中204台作为data node,尚有3台作为root node,每位读者都可以在阿里云网站上轻松按需购置。假如读者翻看Oracle和DB2的TPC-C测试陈诉会发明,这些数据库城市行使专用的存储装备,譬喻前最高记录保持者Oracle在2010年的测试,行使了97台COMSTAR专用的存储装备,个中28台用来存储数据库的重做日记(Redo Log)。 硬件的差别给软件架构提出了完全差异的挑衅,专用的存储装备其内部通过硬件冗余实现了装备自身的靠得住担保,数据库软件在行使这样的存储装备时就自然的预设了数据不会丢失。可是,这种方法带来了本钱的极大耗损,专用的存储装备的价值都是出格昂贵的。 OceanBase行使通用的ECS处事器提供数据库处事,而且只行使ECS呆板自带的当地硬盘做数据存储,这是最通用的硬件前提。可是这种方法对软件架构提出了很大的挑衅,由于单个ECS处事器的不如专用的存储装备靠得住性高。这也对OceanBase的事宜引擎提出了很大的挑衅,OceanBase是在平凡的ECS处事器上就可以实现ACID特征。 TPC-C测试是对事宜ACID特征有完备而且严酷的要求。下面别离先容OceanBase针对事宜ACID的特征的办理方案。 Paxos日记同步担保耐久性(Durability) OceanBase数据库的事宜耐久性(Durability)担保是依靠事宜重做日记(Redo Log)的耐久性来告竣的。全部的 Redo Log 会及时强同步到其它两台数据库处事呆板上,包括发生 Redo Log 的呆板在内,总共会有三台呆板在硬盘中耐久化 Redo Log。 OceanBase 回收了 Paxos 同等性同步协议来和谐这三台呆板上 Redo Log 的耐久化,Paxos协议回收高出半数(也叫“大都派”)乐成即算乐成的算法(三个副本时,两个乐成即高出半数),当个中两台呆板完成耐久化后,事宜即可完成提交,剩下的一台呆板的 Redo Log 在凡是环境下,也是当即就耐久化完成了。但假如这台呆板可巧呈现非常,也不会影响事宜的提交,体系会在其规复后自动补齐所缺失的 Redo Log。假如呆板永世妨碍,体系会将妨碍呆板所应认真同步的数据分手给集群内的其他呆板,这些呆板会自动补齐所缺失内容,并跟上最新的 Redo Log 写入。 行使Paxos同等性协议的最大上风是数据耐久化和数据库处事可用性的美满均衡。当行使三个副本时,任何时辰坏掉一个副本时至少尚有另一个副本稀有据,而且写入还可以一连,由于还剩下两个副本,后续的写入也不受影响。 以是,OceanBase 在担保了事宜耐久性的同时,也大大晋升了数据库的持续处事手段。TPC组织的审计员在现场审计OceanBase耐久机手段时,在客户端一连发生压力的环境下,从OceanBase集群中随意挑选了一台呆板做了逼迫断电操纵,发明数据库的数据不只没丢,数据库不必要任何人工过问还能一连的提供处事,审计员们都很受惊,而且对OceanBase大为赞赏。 依赖自动两阶段提交办理原子性(Atomicity) TPC-C测试模子的五种事宜中的“订单建设”和“订单付出”两个事宜别离会对很大都据做修改,是个中相对伟大的两个事宜。TPC-C尺度对事宜的原子性(Atomicity)是逼迫性的要求,要求一个事宜内部对客栈、订单、用户等表格的修改必然要原子的见效,不应承呈现只有一半乐成的环境。 OceanBase的数据是凭证客栈ID(Warehouse_ID)拆分到多台呆板上的,假如全部的事宜都是产生在统一个客栈内部,那么无论数据量有多大,事宜的修改都只会涉及一台呆板的数据,也就是在一台呆板上完成事宜提交,这是一种美满的线形扩展的场景。可是这不切合现实的营业场景,大大都的现实营业城市有许多差异维度之间的数据交互。TPC-C测试尺度也是对此当真思量,以是对付事宜操纵数据的随机性法则提出了要求,最终要担保发生10%的“订单建设”事宜和15%的“订单付出”事宜要操纵两个及以上的客栈。在OceanBase数据库内,这样就发生了跨呆板的事宜操纵,而这必需行使两阶段提交协议来担保原子性。 OceanBase会自动跟踪一个事宜内全部SQL语句操纵的数据,按照现实数据修改的位置自动确定两阶段提交的参加者,事宜开始提交时,OceanBase自动选择第一个参加者作为和谐者,和谐者会给全部参加者发送Prepare动静,每个参加者都必要写各自的Redo Log和Prepare Log(也意味着每个参加者各自做本身的Paxos同步),等和谐者确认全部参加者的Redo Log和Prepare Log完成后,然后再给全部参加者发送Commit动静,再等全部参加者的Commit事变完成。整个协议是在事宜提交进程中自动完成,对用户完全透明。OceanBase为每一个两阶段提交事宜自动选择一个和谐者,整个体系任何呆板都可以分管和谐者事变,以是OceanBase可以将事宜处理赏罚手段举办线形扩展。 多版本并发节制担保事宜的断绝性(Isolation) TPC-C尺度里要求“订单建设”、“订单付出”、“订单配送”、“订单付出”事宜之间都是串行化断绝级别(Serializable)。OceanBase回收的要领是基于多版本的并发节制机制。事宜提交时会申请一个事宜的提交时刻戳,事宜内的修改以新的版本写入存储引擎,而且担保之前版本的数据不受影响。事宜开始时会获取一个读取时刻戳,整个事宜内数据的读取操纵只会看到基于读取时刻戳的已提交数据。以是,事宜的读取不会碰着脏数据、不行一再读数据以及幻读数据。同时,事宜的修改会在修改的数据行上持有行锁,担保两个并发的修改沟通行的事宜会互斥。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |