蚂蚁金服OceanBase挑战TPCC | TPC-C基准测试之存储优化

蚂蚁金服自研数据库 OceanBase 登顶 TPC-C 引起业内广泛关注,为了更清楚的展示其中的技术细节,我们特意邀请 OceanBase 核心研发人员对本次测试进行技术解读,共包括五篇:

1)TPC-C基准测试介绍
2)OceanBase如何做TPC-C测试
3)TPC-C基准测试之SQL优化
4)TPC-C基准测试之数据库事务引擎的挑战
5)TPC-C基准测试之存储优化


TPC-C 规范要求被测数据库的性能(tpmC)与数据量成正比。TPC-C 的基本数据单元是仓库(warehouse),每个仓库的数据量通常在 70MB 左右(与具体实现有关)。TPC-C 规定每个仓库所获得的 tpmC 上限是 12.86(假设数据库响应时间为0)。假设某系统获得 150万 tpmC,大约对应 12万个仓库,按照 70MB/仓库计算,数据量约为 8.4TB。某些厂商采用修改过的不符合审计要求的 TPC-C 测试,不限制单个 warehouse 的 tpmC 上限,测试几百到几千个 warehouse 全部装载到内存的性能,这是没有意义的,也不可能通过审计。在真实的 TPC-C 测试中,存储的消耗占了很大一部分。OceanBase 作为第一款基于 shared nothing 架构登上 TPC-C 榜首的数据库,同时也作为第一款使用 LSM Tree 存储引擎架构登上 TPC-C 榜首的数据库,在存储架构上有如下关键点:

  1. 为了保证可靠性,OceanBase 存储了两个数据副本和三个日志副本,而传统的集中式数据库测试 TPC-C 只存储一份数据;
  2. 由于 OceanBase 存储两个数据副本,再加上 OceanBase TPC-C 测试采用了和生产系统完全一样的阿里云服务器 i2 机型,SSD 硬盘的存储容量成为瓶颈。OceanBase 采用在线压缩的方式缓解这个问题,进一步增加了 CPU 使用;相应地,集中式数据库测试存储一份数据,不需要打开压缩;
  3. OceanBase LSM 引擎定期需要在后台做 compaction 操作,而 TPC-C 要求测试至少运行 8 小时且 2 小时之内抖动小于 2%,因此,OceanBase 存储需要解决 LSM 引擎后台操作导致的抖动问题;

两份数据

为了保证可靠性和不丢数据(RPO=0),有两种不同的方案:一种方案是在硬件层面容错,另一种方案是在软件层面容错。OceanBase 选择在软件层面容错,优势是硬件成本更低,带来的问题是需要冗余存储多个副本的数据。OceanBase 使用 Paxos 协议保证在单机故障下数据的强一致。在 Paxos 协议中,一份数据需要被同步到多数派(超过一半),才被认为是写入成功,所以一般来说副本个数总是奇数,出于成本考虑最常见的部署规格是三副本。

三副本带来的首要问题就是存储成本的上升,之前商业数据库的 TPC-C 测试大多基于磁盘阵列,而 TPC-C 规范中明确对磁盘阵列不做容灾要求,使用相对于传统数据库三倍的存储空间进行 TPC-C 测试显然难以接受。我们注意到这样一个事实,通过 Paxos 协议同步的只是日志,日志需要写三份,但数据不是,数据只需要有两份就可以完成单机故障的容灾了,当一份数据由于服务器宕机不可用时,另一份数据只要通过日志把数据补齐,就可以继续对外提供访问。和数据存储相比,日志的存储量比较小。我们将数据与日志分开,定义了三种不同的副本类型:F 副本既包含数据又同步日志,并对外提供读写服务;D 副本既包含数据又同步日志,但对外不提供读写服务;L 副本只同步日志,不存储数据。当 F 副本出现故障时,D 副本可以转换为 F 副本,补齐数据后对外提供服务。在 TPC-C 测试中我们使用 FDL 模式进行部署(一个 F 副本,一个 D 副本,一个 L 副本),使用了两倍数据副本的存储空间。无论是 D 副本还是 L 副本,都需要回放日志,D 副本还需要同步数据,这些都是都会消耗网络和 CPU。

在线压缩

在 shared nothing 架构下,OceanBase 至少需要存储两份数据才可以满足容灾的要求,这意味着 OceanBase 需要比传统数据库多耗费一倍的存储空间。为了缓解这个问题,OceanBase TPC-C 测试选择对数据进行在线压缩,Oracle 数据库中一个 warehouse 的存储容量接近 70MB,而 OceanBase 压缩后存储容量只有 50MB 左右,大幅降低了存储空间。TPC-C 规范要求磁盘空间能够满足 60 天数据量的存储,对于 OceanBase,由于需要保存两份数据,虽然可靠性更好,但需要保存相当于 120 天的数据量,这些存储成本都要计入总体价格。OceanBase 使用了 204 台 ECS i2 云服务器存储数据,服务器规格和线上真实业务应用保持一致。每台服务器的日志盘 1TB,数据盘接近 13TB。计算两份压缩后的数据 60 天的存储空间之后,服务器的数据盘基本没有太多余量,从服务器的资源成本消耗来看,已经达到了比较好的平衡。如果 OceanBase 的单机性能 tpmC 进一步提升,磁盘容量将成为瓶颈。OceanBase LSM 引擎是 append-only 的,它的优势是没有随机修改,能够在线压缩。无论是 TPC-C 测试,还是最核心的 OLTP 生产系统(例如支付宝交易支付),OceanBase 都会打开在线压缩,通过 CPU 换存储空间。

存储性能平滑

TPC-C 测试很大的挑战在于在整个压测过程中性能曲线要求是绝对平滑的,曲线上的波动幅度不能超过 2%,这对于传统数据库来说都是一件困难的事情,因为这要求对于所有后台任务的精细控制,不能由于某个后台任务的资源过度使用导致前台请求的阻塞积压。而对于 OceanBase 而言,事情变得更为困难,因为 OceanBase 的存储引擎是基于 LSM Tree 的,在 LSM Tree 要定期执行 compaction 操作。Compaction 是个非常重的后台操作,会占用大量 CPU 和磁盘 IO 资源,这对前台的用户查询和写入天然就会造成影响。我们做了一些优化,来平滑后台任务对性能的影响,从最终的测试结果来看,性能曲线在整个 8 小时压测过程中的抖动小于 0.5%。

分层转储

在 LSM Tree 中,数据首先被写入内存中的 MemTable,在一定时候为了释放内存,MemTable 中的数据需要与磁盘中的 SSTable 进行合并,这个过程被称为 compaction。在很多基于 LSM Tree 的存储系统中,为了解决写入的性能问题,通常会将 SSTable 分为多层,当一层的 SSTable 个数或者大小达到某个阈值时,合并入下一层 SSTable。多层 SSTable 解决了写入的问题,但是 SSTable 的个数过多,会极大拖慢查询的性能。OceanBase 同样借鉴了分层的思路,但同时使用了更加灵活的 compaction 策略,确保 SSTable 总数不会太多,从而在读取和写入性能之间做了更好的平衡。

资源隔离

Compaction 等后台任务需要消耗大量的服务器资源,为了减少后台任务对用户查询和写入的影响,我们在 CPU、内存、磁盘 IO 和网络 IO 四个方面对前后台任务做了资源隔离。在 CPU 方面,我们将后台任务和用户请求分为不同的线程池,并按照 CPU 亲和性做了隔离。在内存方面,对前后台请求做了不同的内存管理。在磁盘 IO 方面,我们控制后台任务 IO 请求的 IOPS,使用 deadline 算法进行流控。在网络 IO 方面,我们将后台任务 RPC 和用户请求 RPC 分为不同队列,并对后台任务 RPC 的带宽使用进行流控。

存储CPU占用

TPC-C 基准测试主要考察整体性能 tpmC,很多人也会关注单核的 tpmC。然而,这个指标只有在相同架构下才有意义。对于存储模块的 CPU 占用,有如下三点:

  1. 对于集中式架构,除了数据库使用 CPU 之外,专用存储设备也需要使用 CPU。例如,第二名 Oracle 3000多万 tpmC 的测试中,数据库使用了 108 颗 T3 SPARC 处理器,共有 1728 个物理核心和 13824 个执行线程,同时存储设备使用的是 Intel 服务器作为机头,总共使用了 97 台服务器,194 颗 Intel X5670 CPU,2328 个物理核心;
  2. 集中式数据库使用高可靠硬件,只需要存储一个副本,而 OceanBase 通过软件层面容错,虽然硬件成本更低但需要两个数据副本和三个日志副本,维护多个副本需要耗费大量 CPU;
  3. OceanBase 在 TPC-C 测试和生产系统中都打开了在线压缩,进一步增加了 CPU 使用;

因此,简单地对比OceanBase和Oracle的CPU核是不科学的,还需要算上共享存储设备的CPU核,以及OceanBase存储多副本和在线压缩带来的CPU开销。TPC-C推荐的方案是不关注具体的软件架构和硬件架构,关注硬件总体成本。在OceanBase的测试中,硬件成本只占整体成本的18%左右,只考虑硬件的性价比大幅优于集中式数据库。

后续发展

OceanBase的优势在于采用分布式架构,硬件成本更低,可用性更好且能够做到线性扩展,但是,OceanBase单机的性能离Oracle、DB2还有不小的差距,后续需要重点优化单机存储性能。另外,OceanBase的定位是在同一套引擎同时支持OLTP业务和OLAP业务,而目前OceanBase的OLAP处理能力还不如Oracle,后续需要加强存储模块对大查询的处理能力,支持将OLAP算子下压到存储层甚至在压缩后的数据上直接做OLAP计算。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(企业案例)Nacos Config 进阶使用

文章目录一、SpringBoot 使用 Nacos Config 实现多环境切换1. 现象2. 引入依赖3. 添加bootstrap.yaml配置文件4. 配置对应关系图5. 文件格式简述6. 启动nacos7. 添加生产配置8. 添加测试controller9. 启动Springboot工程并观察到如下日志则为成功10. 浏览器验证11. 调整激活环境…

OceanBase如何获得TPC-C测试第1名?

阿里妹导读:TPC-C是TPC组织(国际事务性能委员会)制定的关于商品销售的订单创建和订单支付等的基准测试标准,是数据库联机交易处理系统的权威基准测试标准。 蚂蚁金服自研的分布式关系数据库OceanBase获得TPC-C测试第一名后&#…

简单查询(DQL)

简单查询(DQL) 1. 查询一个字段? ​ select 字段名 form 表名; ​ 其中要注意: ​ select 和 form 都是关键字 ​ 字段名和表名都是标识符 强调: 所有SQL语句都是“;”结尾 2.查询两个字段&#xf…

由一次磁盘告警引发的“血案”——你知道 du 和 ls 区别吗?

来源 | 程序猿石头责编 | Carol封图 | CSDN下载自视觉中国图来源于 SkyPixel知道为什么会有上面的结果吗?什么又是稀疏文件?这篇文章将为你揭秘。问题背景确切地说,不是收到的自动告警短信或者邮件告诉我某机器上的磁盘满了,而是某…

如何优化大规模推荐?下一代算法技术JTM来了

阿里妹导读:搜索,推荐和广告是互联网内容提供商进行价值创造的核心业务,在阿里巴巴的电子商务交易平台上,搜索,推荐和广告业务同样具有举足轻重的意义和价值。现在,阿里推荐技术又双叒优化了,新…

Sentinel 基于Nacos规则持久化-推模式

文章目录一、推模式架构图二、原理简述2.1. 组件版本关系2.2. 控制台推送规则三、Sentinel控制台改造3.1. 下载源码3.2. 修改pom3.3. 重要文件复制3.4. 注册地址修改3.5. 请求实例需改3.6. 菜单新增四、编译 & 启动4.1. 先启动nacos4.2. 编译打包4.3. 创建微服务 &&…

都听我的,会养猪种菜的工程师最帅了!

来了!今天,阿里数字农业事业部在黑龙江首次亮相,并且定了一个小目标:到2022年,阿里涉农产品全年网络销售额破4000亿元。 黑龙江省牡丹江市的阿里巴巴响水大米种植基地,又到了收割季 数字农业事业部将建立产…

清华硕士一针见血:这些才是机器学习必备的数学基础

现如今,计算机科学、人工智能、数据科学已成为技术发展的主要推动力。无论是要翻阅这些领域的文章,还是要参与相关任务,你马上就会遇到一些拦路虎:想过滤垃圾邮件,不具备概率论中的贝叶斯思维恐怕不行;想试…

排序数据.

排序 1、查询所有员工工资,排序? ​ select ​ ename,sal ​ from ​ emp ​ order by ​ sal;//默认是升序!!! 2. 怎么降序?、 ​ 指定降序: ​ select ​ ename,sal ​ from ​ …

前端传递多个数组以及其他参数,springboot后台如何接收

前端传递多个数组以及其他参数,springboot后台如何接收 前端传递参数ajax代码 var arr1["1","2","3"];var arr2["aa","bb","cc"];var id 1;$.ajax({type: "post",//注意不能用getdataType:…

Java 编程技巧之数据结构

导读 唐宋八大家之一欧阳修在《卖油翁》中写道: 翁取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿。因曰:“我亦无他,唯手熟尔。” 编写代码的"老司机"也是如此&#…

如何查看使用 Cloud Toolkit 部署应用的实时日志

之前,我们介绍了《在 IntelliJ IDEA 中部署应用到服务器》。最新版本 Cloud Toolkit 新增了对远程服务器应用部署时,实时日志的查看功能。功能预览如下: 打开应用部署的配置界面,如上图所示,点击「Advanced」标签页&am…

这 10 个云计算错误,会让你的业务一蹶不振!

作者 | John Edwards译者 | 火火酱,责编 | Carol出品 | CSDN 云计算(CSDNcloud)封图 | CSDN 付费下载自视觉中国乐观主义者们总爱说:“乌云总是镶着金边的”,但他们没有说的是,在乌云下常有狂风、暴雨、闪电…

MySQL 8.0.26 简易配置安装教程 (windows 64位)

文章目录一、软件下载解压1. 官网下载2.下载完成后解压二、mysql配置2.1. my.ini2.2. 初始化MySQL2.3. 安装MySQL服务2.4. mysql已经安装过了2.5. 启动MySQL的服务三、密码修改3.1. 登录mysql3.2. 修改密码3.3. 退出mysql四、客户端连接mysql4.1. Navicat4.2. 登录mysql4.3. 操…

类与字节码技术

类文件结构 1.1 魔数 0-3字节,表示它是否是【class】类型的文件 ​ |java| 0000000 ca fe ba be 00 00 00 34 00 23 0a 00 06 00 15 09 1.2 版本 4-7字节,表示类的版本00 34 (52) 表示是Java8 0000000 ca fe ba be 00 00 00…

支付宝 App 是如何建设移动 DevOps 的?

本文系InfoQ对蚂蚁金服技术专家洪锋的采访,洪锋老师即将在 QCon 上海站 2019 分享《移动研发 DevOps 在支付宝 App 内的落地实践》,欢迎关注。 微软 MSDN 上的一篇文章有这样一段话:“移动应用的理想环境需要满足两个条件,一是可以…

淘宝端智能演进和思考

今天分享内容包括三部分,第一是端智能整体趋势和淘宝应用现状,第二是淘宝在应用端智能过程中面临的问题和挑战,以及我们的应对和解决思路,我们构建了端到端的完整技术体系,第三是开源推理引擎 MNN 的最新情况。 01、端…

如何取SQL结果集的第一条记录

在SQL Server数据库中,使用top关键字:SELECT TOP number|percent column_name(s) FROM table_name 在MySQL数据库中,使用LIMIT关键字:SELECT column_name(s) FROM table_name LIMIT number例子:SELECT * FROM Persons LIMIT 1 在O…

从零开始入门 K8s | 可观测性:你的应用健康吗?

一、需求来源 首先来看一下,整个需求的来源:当把应用迁移到 Kubernetes 之后,要如何去保障应用的健康与稳定呢?其实很简单,可以从两个方面来进行增强: 首先是提高应用的可观测性;第二是提高应…

技术差的程序员,90%都输在这点上!骨灰级开发:其实都是在瞎努力!

01从未得到过重视的问题“一流程序员学数学,二流程序员学算法,低端看高端就是黑魔法”。可能有人会以为这是段子,而有过开发经验的都知道,这就是程序员的真实写照!而数学不好的程序员,我想你开发过程中&…