复盘:我在真实场景下对几款主流云原生数据库进行极限性能压测的一次总结!!(建议收藏)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 最近几年,云数据库市场日趋繁荣,进入百花齐放、百家争鸣的时代,头部云计算厂商相继推出了自己的数据库产品,特别是亚马逊的Aurora、阿里云的PolarDB、华为云的GaussDB等等。

作为MySQL技术专家,我写过MySQL系列丛书《MySQL技术大全:开发, 优化与运维实战》, 有挺多准备上云企业的DBA或者架构师同学询问,如何对市场上五花八门的数据库进行选型, 我觉得首先是稳定性, 然后就是性能。今天,我就针对PolarDB、OceanBase、Aurora、GaussDB、TDSQL-C这五款数据库产品做个开箱性能评测供企业选型参考。

评测总览

为了方便读者更好的了解本次性能评测的整体结论,首先给出测试结果的总览图和相关结论:

在小规格实例(8C)的性能测试中,无论是在计算密集型场景还是在I/O密集型场景,各类测试负载下,PolarDB整体的测试性能是最好的.

对于大规格实例(64C),各数据库实例间的性能差距更为明显。值得一提的是,在测试负载下Aurora写性能明显较差。整体而言,PolarDB性能相比于Aurora、TDSQL-C、Oceanbase和GaussDB等同类竞品同样具有较为显著的优势。

image.png


压测情况

本次参与压力测试的数据库包括了阿里云的PolarDB数据库, 亚马逊云的Aurora数据库,蚂蚁集团100%控股的数据库OceanBase数据库,华为云的GaussDB数据库,以及腾讯云的TDSQL-C数据库。参与评审的都是MySQL 兼容版。

压测环境

为了保证压测结果的公平性,五个数据库均部署在各自的数据库厂商所在的云服务器上,且每个数据库所在的服务器实例规格都一样,云服务器实例规格都是8C64GB和64C512GB、MySQL 8.0,一主一从。

但OceanBase数据库由于规格限制,实际上,采用的云服务器实例规格为62C400GB。

在实例规格一致(除OceanBase使用62C400GB规格)的前提下,我们在各自的云服务器上都是采用的开箱配置。

压测配置

我们会对五个数据库的压力测试采用计算密集型和I/O密集型两种配置方式,并且会采用在配置上严格一致的shell脚本来进行压测。

计算密集型配置方式

对于计算密集型配置方式来说,压测五个数据库时,最终的结果信息将按如下格式进行输出。

case
数据库名称;数据表的数量;数据表大小(每张表中数据的条数);
;最大线程数量;最小线程数量;
云服务器实例名称;对应线程数目的QPS;对应线程数目的QPS;

这里,对上述输出结果的格式进行简要说明:

  • case:表示压测数据库时采用的数据库读写模式,主要的取值分为:oltp_read_only(只读模式)、oltp_read_write(读写模式)、oltp_write_only(只写模式)。
  • 数据库名称:压测数据库时指定的数据库名称,例如我们在对数据库采用计算密集型的配置方式进行压测时,指定的数据库名称为tpk_s。
  • 数据表的数量:压测数据库时指定的数据库中数据表的数量,例如我们在对数据库采用计算密集型的配置方式进行压测时,每个数据库中指定的数据表数量为10。
  • 数据表大小:压测数据库时指定每张数据表中数据的大小,例如我们在对数据库采用计算密集型的配置方式进行压测时,每张数据表中的数据大小为10000000。
  • 线程数量:这个就比较好理解了,压测数据库时,指定采用多少个线程开始压测。例如我们对数据库采用计算密集型的配置方式进行压测时,在8C64GB规格下,最大线程数量为128,最小线程数量为1。在64C512GB规格下,最大线程数量为300,最小线程数量为1。
  • 云服务实例名称:数据库所在的云服务器实例名称,注意这里不是压测脚本所在的云服务器实例名称。
  • 对应线程数目的qps:按照格式分别输出的最大线程数目和最小线程数目对应的QPS。

I/O密集型配置方式

对于I/O密集型配置方式来说,压测五个数据库,最终的结果信息将按照如下格式进行输出。

case
 数据库名称;数据表的数量;数据表大小(每张表中数据的条数);
 ;最大线程数量;最小线程数量;
 云服务器实例名称;对应线程数目的QPS;对应线程数目的QPS;

可以看到,采用I/O密集型的配置方式进行压测与采用计算密集型的配置方式进行压测输出的结果格式是相同的。但进行实际压测时,二者的配置信息存在稍许差异。

  • 计算密集型方式的数据库名称为tpk_s,而I/O密集型的配置方式数据库名称为tpk_l。
  • 计算密集型方式的数据表大小为10000000,而I/O密集型的配置方式在8C64GB规格下,数据表大小为40000000。在64C512GB规格下,数据表大小为300000000。

以下是综合对比结果, 具体每一个产品PolarDB、OceanBase、Aurora、GaussDB和TDSQL-C 的测试在文章末尾, 感兴趣的小伙伴可以参考对比.

综合对比

8C64GB规格综合对比

为了更加直观的对比每款数据库在8C64GB规格下的性能,这里我将在8C64GB规格下的压测结果数据进行整合对比,如下所示。

计算密集型压测结果对比

(1)oltp_read_only模式压测对比

数据库 128线程QPS 1线程QPS
PolarDB 95863.56 5184.38
OceanBase 61068.59 1953.32
Aurora 69933.45 3183.13
GaussDB 85244.76 5638.32
TDSQL-C 94343.16 4091.835

(2)oltp_read_write模式压测对比

数据库 128线程QPS 1线程QPS
PolarDB 82701.53 4809.97
OceanBase 39874.51 1801.23
Aurora 42649.67 2465.01
GaussDB 58522.77 4896.80
TDSQL-C 61997.33 2661.6075

(3)oltp_write_only模式压测对比

数据库 128线程QPS 1线程QPS
PolarDB 96784.14 4617.05
OceanBase 31767.13 1648.32
Aurora 35598.10 1484.75
GaussDB 58697.92 2216.81
TDSQL-C 53867.95 1799.2725

从我对五款数据库进行计算密集型压测结果的综合对比可以看出,在oltp_read_only模式下、oltp_read_write模式下和oltp_write_only模式下,开启1或128个线程压测时,PolarDB性能最好。

I/O密集型压测结果对比

(1)oltp_read_only模式压测对比

数据库 128线程QPS 1线程QPS
PolarDB 67105.08 2943.15
OceanBase 33997.1 1684.21
Aurora 30695.90 1056.77
GaussDB 24423.91 1927.34
TDSQL-C 48069.14 2032.22

(2)oltp_read_write模式压测对比

数据库 128线程QPS 1线程QPS
PolarDB 61093.90 2891.23
OceanBase 29325.76 1582.34
Aurora 21751.73 683.03
GaussDB 23178.85 1703.34
TDSQL-C 38388.89 1667.94

(3)oltp_write_only模式压测对比

数据库 128线程QPS 1线程QPS
PolarDB 61438.08 2602.82
OceanBase 29876.21 1503.22
Aurora 23290.39 1001.32
GaussDB 41209.88 1638.43
TDSQL-C 40414.65 1559.45

从我对五款数据库进行I/O密集型压测结果的综合对比可以看出,无论是在oltp_read_only模式、oltp_read_write模式,还是在oltp_write_only模式下,PolarDB的性能都是最优的。

64C512GB规格综合对比

为了更加直观的对比每款数据库在64C512GB规格下的性能,这里我将在64C512GB规格下的压测结果数据进行整合对比,如下所示。

计算密集型压测结果对比

(1)oltp_read_only模式压测对比

数据库 300线程QPS 1线程QPS
PolarDB 583481.91 5299.95
OceanBase 210599.67 1979.00
Aurora 460661.52 3953.16
GaussDB 324943.02 5238.16
TDSQL-C 345769.06 4102.13

(2)oltp_read_write模式压测对比

数据库 300线程QPS 1线程QPS
PolarDB 459306.28 4998.68
OceanBase 161787.02 1725.00
Aurora 161193.67 2330.50
GaussDB 231511.89 3528.90
TDSQL-C 259070.85 2648.34

(3)oltp_write_only模式压测对比

数据库 300线程QPS 1线程QPS
PolarDB 415477.31 5025.55
OceanBase 102735.32 1636.21
Aurora 52484.71 1282.10
GaussDB 195454.50 2077.85
TDSQL-C 122732.32 1799.2725

从我对五款数据库进行计算密集型压测结果的综合对比可以看出,无论是在oltp_read_only模式,还是在oltp_read_write模式,亦或是在oltp_write_only模式下,PolarDB的性能都是最好的。

I/O密集型压测结果对比

(1)oltp_read_only模式压测对比

数据库 300线程QPS 1线程QPS
PolarDB 379448.39 3205.95
OceanBase 186231.85 1663.59
Aurora 162073.88 908.75
GaussDB 202102.54 2438.24
TDSQL-C 130938.23 2203.23

(2)oltp_read_write模式压测对比

数据库 300线程QPS 1线程QPS
PolarDB 323182.93 3147.55
OceanBase 142723.88 1592.08
Aurora 75080.03 807.78
GaussDB 164403.19 2243.14
TDSQL-C 112711.66 1782.34

(3)oltp_write_only模式压测对比

数据库 300线程QPS 1线程QPS
PolarDB 335549.53 3751.35
OceanBase 99543.00 1447.24
Aurora 26616.15 748.74
GaussDB 152426.14 2254.31
TDSQL-C 72023.23 1582.23

在大规格实例I/O密集型压测中,同样是PolarDB的测试性能最优,并且相对其他产品的优势比小规格实例更为明显。

以下是详细的PolarDB、OceanBase、Aurora、GaussDB和TDSQL-C 测试结果.

压测结果

在压测环境和压测配置都严格一致的情况下,我们开始对PolarDB、OceanBase、Aurora、GaussDB和TDSQL-C数据库分别进行压测。我对最终压测得出的结果数据进行了整理,下面分别按照8C64GB和64C512GB的规格给出测试结果。

8C64GB规格测试结果

PolarDB压测结果

(1)计算密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 128线程QPS 1线程QPS
oltp_read_only 10 10000000 128 1 95863.56 5184.38
oltp_read_write 10 10000000 128 1 82701.53 4809.97
oltp_write_only 10 10000000 128 1 96784.14 4617.05

(2)I/O密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 128线程QPS 1线程QPS
oltp_read_only 10 40000000 128 1 67105.08 2943.15
oltp_read_write 10 40000000 128 1 61093.90 2891.23
oltp_write_only 10 40000000 128 1 61438.08 2602.82

OceanBase压测结果

(1)计算密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 128线程QPS 1线程QPS
oltp_read_only 10 10000000 128 1 61068.59 1953.32
oltp_read_write 10 10000000 128 1 39874.51 1801.23
oltp_write_only 10 10000000 128 1 31767.13 1648.32

(2)I/O密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 128线程QPS 1线程QPS
oltp_read_only 10 40000000 128 1 33997.1 1684.21
oltp_read_write 10 40000000 128 1 29325.76 1582.34
oltp_write_only 10 40000000 128 1 29876.21 1503.22

Aurora压测结果

(1)计算密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 128线程QPS 1线程QPS
oltp_read_only 10 10000000 128 1 69933.45 3183.13
oltp_read_write 10 10000000 128 1 42649.67 2465.01
oltp_write_only 10 10000000 128 1 35598.10 1484.75

(2)I/O密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 128线程QPS 1线程QPS
oltp_read_only 10 40000000 128 1 30695.90 1056.77
oltp_read_write 10 40000000 128 1 21751.73 683.03
oltp_write_only 10 40000000 128 1 23290.39 1001.32

GaussDB压测结果

(1)计算密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 128线程QPS 1线程QPS
oltp_read_only 10 10000000 128 1 85244.76 5638.32
oltp_read_write 10 10000000 128 1 58522.77 4896.80
oltp_write_only 10 10000000 128 1 58697.92 2216.81

(2)I/O密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 128线程QPS 1线程QPS
oltp_read_only 10 40000000 128 1 24423.91 1927.34
oltp_read_write 10 40000000 128 1 23178.85 1703.34
oltp_write_only 10 40000000 128 1 41209.88 1638.43

TDSQL-C压测结果

(1)计算密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 128线程QPS 1线程QPS
oltp_read_only 10 10000000 128 1 94343.16 4091.835
oltp_read_write 10 10000000 128 1 61997.33 2661.6075
oltp_write_only 10 10000000 128 1 53867.95 1799.2725

(2)I/O密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 128线程QPS 1线程QPS
oltp_read_only 10 40000000 128 1 48069.14 2032.22
oltp_read_write 10 40000000 128 1 38388.89 1667.94
oltp_write_only 10 40000000 128 1 40414.65 1559.45

64C512GB规格测试结果

PolarDB压测结果

(1)计算密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 300线程QPS 1线程QPS
oltp_read_only 10 10000000 300 1 583481.91 5299.95
oltp_read_write 10 10000000 300 1 459306.28 4998.68
oltp_write_only 10 10000000 300 1 415477.31 5025.55

(2)I/O密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 300线程QPS 1线程QPS
oltp_read_only 10 300000000 300 1 379448.39 3205.95
oltp_read_write 10 300000000 300 1 323182.93 3147.55
oltp_write_only 10 300000000 300 1 335549.53 3751.35

OceanBase压测结果

(1)计算密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 300线程QPS 1线程QPS
oltp_read_only 10 10000000 300 1 210599.67 1979.00
oltp_read_write 10 10000000 300 1 161787.02 1725.00
oltp_write_only 10 10000000 300 1 102735.32 1636.21

(2)I/O密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 300线程QPS 1线程QPS
oltp_read_only 10 300000000 30 1 186231.85 1663.59
oltp_read_write 10 300000000 30 1 142723.88 1592.08
oltp_write_only 10 300000000 30 1 99543.00 1447.24

Aurora压测结果

(1)计算密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 300线程QPS 1线程QPS
oltp_read_only 10 10000000 300 1 460661.52 3953.16
oltp_read_write 10 10000000 300 1 161193.67 2330.50
oltp_write_only 10 10000000 300 1 52484.71 1282.10

(2)I/O密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 300线程QPS 1线程QPS
oltp_read_only 10 300000000 300 1 162073.88 908.75
oltp_read_write 10 300000000 300 1 75080.03 807.78
oltp_write_only 10 300000000 300 1 26616.15 748.74

GaussDB压测结果

(1)计算密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 300线程QPS 1线程QPS
oltp_read_only 10 10000000 300 1 324943.02 5238.16
oltp_read_write 10 10000000 300 1 231511.89 3528.90
oltp_write_only 10 10000000 300 1 195454.50 2077.85

(2)I/O密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 300线程QPS 1线程QPS
oltp_read_only 10 300000000 300 1 202102.54 2438.24
oltp_read_write 10 300000000 300 1 164403.19 2243.14
oltp_write_only 10 300000000 300 1 152426.14 2254.31

TDSQL-C压测结果

(1)计算密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 300线程QPS 1线程QPS
oltp_read_only 10 10000000 300 1 345769.06 4102.13
oltp_read_write 10 10000000 300 1 259070.85 2648.34
oltp_write_only 10 10000000 300 1 122732.32 1799.2725

(2)I/O密集型压测结果

读写模式 表数目 表大小 最大线程数 最小线程数 300线程QPS 1线程QPS
oltp_read_only 10 300000000 300 1 130938.23 2203.23
oltp_read_write 10 300000000 300 1 112711.66 1782.34
oltp_write_only 10 300000000 300 1 72023.23 1582.23

最后,希望这次对于云原生数据库的压测结果能够为大家选型云原生数据库时提供一点点帮助。

好了,今天就到这儿吧,我是冰河,我们下期见~~




相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
安全 关系型数据库 MySQL
MySQL数据库高效秘籍:10个小技巧,让你轻松应对各种场景!
【8月更文挑战第25天】本文介绍了十个提升MySQL数据库效率与安全性的实用技巧。涵盖查询性能分析、索引优化、慢查询日志利用、图形化工具如MySQL Workbench的应用、性能分析工具、主从复制实现、备份与恢复策略、数据库迁移方法及安全性保障等多个方面。通过具体的示例代码展示每个技巧的实际操作方式,帮助读者深入理解并有效运用MySQL数据库。
108 0
|
15天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
129 64
|
2月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
101 2
|
15天前
|
供应链 数据库
数据库事务安全性控制有什么应用场景吗
【10月更文挑战第15天】数据库事务安全性控制有什么应用场景吗
|
2月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
313 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
2月前
|
JavaScript 前端开发 数据库
数据库测试场景实践总结
本文介绍了数据库超时和应用锁表SSDB测试场景的验证方法,通过锁定数据表模拟写入失败情况,并利用SSDB进行重试。测试需开发人员配合验证功能。同时,提供了SSDB服务器登录、查询队列数量及重启服务等常用命令。适用于验证和解决数据库写入问题。
33 7
|
3月前
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
|
3月前
|
Cloud Native 数据库 开发者
云原生数据库2.0问题之帮助阿里云数据库加速技术更新如何解决
云原生数据库2.0问题之帮助阿里云数据库加速技术更新如何解决
|
3月前
|
Cloud Native 关系型数据库 分布式数据库
云原生关系型数据库PolarDB问题之PolarDB相比传统商用数据库的优势如何解决
云原生关系型数据库PolarDB问题之PolarDB相比传统商用数据库的优势如何解决
38 1