云数据库技术

再测云原生数据库性能:PolarDB依旧最强,TDSQL-C、GaussDB变化不大


1.摘要 近期,腾讯云数据库在文章 「 腾讯云TDSQL-C重磅升级,性能全面领跑云原生数据库市场 」 中提到,某些场景下性能有非常大的提升,且超过国内某橙色云厂商。恰好, 在5月份,我们对各个厂商的云原生数据库进行过一次压测,所以,看到文章,我们第一时间做了验证。具体的,验证内容包括:
  • 当前的TDSQL-C性能与五月份相比,是否有明显增强
  • 不同厂商的云原生数据库性能是否有明显变化
2.测试结果
  • TDSQL-C在「读写混合」场景下,5月、6月性能并没有明显变化 :

  • 各云厂商在「读写混合」、「只读」、「只写」场景下的压测结果: 阿里云的PolarDB性能最好,其次是华为云的GaussDB、腾讯云的TDSQL-C:


测试下来,暂时没有感受到TDSQL-C “ 重磅升级 ” 。 针对这个问题也通过工单方式咨询了腾讯云的服务人员,得到的答复是:TDSQL-C 的全面升级还没有覆盖所有的地域,目前只在指定地域上线,且还需要开通白名单。
事实证明,白兴奋一场,只能等后续新版本更大范围开放后再测试了。另外,也希望厂商在宣传的时候,说得更清楚一些,否则会让客户困惑。 3.测试说明 这里对我们的测试方式做一个详细说明。本次测试选择了各个厂商的4c16g的规格进行横向对比,使用了工具 sysbench 1.0.2 0版本进行测试。 具体的,在 「读写」、「只读」、「只写」3个场景下进行2~512个线程的压测, 获取 每秒执行事务数TPS(Transactions Per Second)、每秒执行请求数QPS(Queries Per Second)来作为性能对比指标。 测试的数据库规格:

各个云厂商的云原生数据库都使用默认配置参数(开箱即用)。 客户端规格:

测试命令:
-- 准备数据sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=300 --threads={2~512}  oltp_read_write prepare-- 运行workload# OLTP读写混合sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=300 --threads={2~512} --percentile=95 --report-interval=1 oltp_read_write run# OLTP只读场景sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=300 --threads={2~512} --percentile=95 --report-interval=1 oltp_read_only run# OLTP只写场景sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=300 --threads={2~512} --percentile=95 --report-interval=1 oltp_write_only run-- 清理数据sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=300 --threads={2~512} --percentile=95  oltp_read_write/oltp_read_only/oltp_write_only cleanup
说明:10张表,每张表1000万数据,数据集约25G, 2~512个线程进行压测。
补充说明:
  • 阿里云使用:主地址(高可用地址, 用 RW表示)和 集群地址(自动读写分离地址,用 Proxy表示 )
  • 腾讯云使用:读写内网地址(高可用地址, 用 RW表示)和 只读内网地址 (高可用地址, 用 RO表示)
  • 华为云使用:读写内网地址(高可用地址, 用 RW表示)和 数据库代理地址(自动读写分离地址, 用Proxy表示 ),还有直连后端Server节点(单点)地址(用SRW和SRO表示)。
  • 使用Proxy时需要注意:
    • Proxy有一定的链路开销,在没有使用到读写分离的情况下,性能会降低。
    • 腾讯云暂不支持自动读写分离Proxy;阿里云的Porxy在自动读写分离上支持的最好;华为云的Proxy需要开启参数--skip-trx(非事务模式)才能使用从节点,支持的不友好(本文测试没有开启该参数)。
    • 华为云Proxy受CPU和宽带限制:
      CPU个数小于"16":50MBCPU个数小于"32":100MB,CPU个数小于"64":200MB,CPU个数小于"128":400MBCPU个数小于"256":1000MB,最大2000MB
4.测试详情 4.1 TDSQL-C 升级之后是否有提升?
读写场景: 从表中数据的对比看到:2次压测数据性能差距不大,TDSQL-C性能没有提升,原因见「 测试结果 」中的说明。
4.2 TDSQL-C性能有没有超越业内其他云原生数据库产品?
读写场景:

TPS

读写场景结论
  • 不算Proxy的情况下,性能上「阿里云-RW」比「华为云- RW 」高12%,比「腾讯云- RW 」高37%。
  • 算上Proxy的情况下,性能上「阿里云-Proxy」比「阿里云- RW 」高47%;「华为云-Proxy」比「华为云- RW 」低24%,「阿里云-Proxy」比「华为云-Proxy」高61%。
  • 华为云Proxy性能低的原因是其Proxy不支持事务拆分,虽然通过Proxy地址,但也只在主节点上执行(未开启--skip-trx参数:是否跳过SQL语句开头的begin和结尾的commit)。

从QPS和TPS的平均值之和,性能从高到低依次 排序 为:「阿里云-Proxy」> 「阿里云- RW 」> 「华为云- RW 」 > 「腾讯云- RW 」 > 「华为云-Proxy」 只读场景:

只读场景结论:
  • 不算Proxy的情况下,性能上「阿里云- RW 」比「华为云- RW 」高11%,比「腾讯云- RW 」高56%。
  • 算上Proxy的情况下,性能上「阿里云-Proxy」比「阿里云- RW 」高14%;「华为云-Proxy」比「华为云- RW 」低27%;「阿里云-Proxy」比「华为云-Proxy」高100%。
  • 华为云Proxy性能低的原因是其Proxy不支持事务拆分,虽然通过Proxy地址,但也只在主节点上执行(未开启--skip-trx参数:是否跳过SQL语句开头的begin和结尾的commit)。

从QPS和TPS的平均值之和,性能从高到低依次 排序 为:「阿里云-Proxy」> 「阿里云- RW 」> 「华为云- RW 」 > 「华为云-Proxy」>「腾讯云- RW 」
只写场景:

只写场景结论:
  • 不算Proxy的情况下,性能上「阿里云- RW 」比「华为云- RW 」高21%,比「腾讯云- RW 」高60%。
  • 算上Proxy的情况下,性能上「阿里云- RW 」比「阿里云-Proxy」高7%;「华为云- RW 」比「华为云-Proxy」高18%;「阿里云-Proxy」比「华为云-Proxy」高35%。
  • Proxy性能低的原因是代理在增加了链路的前提下,写都在主节点。

从QPS和TPS的平均值之和,性能从高到低依次 排序 为:「阿里云- RW 」> 「阿里云-Proxy」> 「华为云- RW 」 > 「华为云-Proxy」 > 「腾讯云- RW 」
通过以上三个场景的压测对比,可以看到 TDSQL-C性能没有超越业内其他云原生数据库产品, 原因见本文「 测试结果 」中的说明。
5.总结 得到的数据是在TDSQL-C还没有升级的情况下 压测 的,通过各场景 得出的QPS、TPS 的平均值之和来对比,结果如下:
  • 读写场景下: 「阿里云-Proxy」> 「阿里云- RW 」> 「华为云- RW 」 > 「华为云-Proxy」>「腾讯云- RW 」
  • 只读场景下: 「阿里云-Proxy」> 「阿里云- RW 」> 「华为云- RW 」 > 「华为云-Proxy」>「腾讯云- RW 」
  • 只写场景下:「阿里云- RW 」> 「阿里云-Proxy」> 「华为云- RW 」 > 「华为云-Proxy」 > 「腾讯云- RW 」

通过压测数据,看到当前性能最好的依旧是PolarDB。特别在自动读写分离(Proxy)的功能上,阿里云优势大于华为云(不支持事务拆分)和腾讯云(不支持读写分离地址)。也非常 期待 TDSQL-C 在“ 重磅升级 ” 之后带来的性能提升。
后续等TDSQL-C升级覆盖到更多地域之后,再进行测试验证。希望通过本文,对大家在选择云厂商的云原生数据库产品时有帮助。