MySQL该用哪种CPU架构服务器
1. 摘要 近期,阿里云推出了基于ARM架构的RDS MySQL和RDS PostgreSQL实例(邀测阶段)。在介绍云数据库RDS的ARM架构时,表达了一个观点: 在价格下降13%的基础上,平均性能 ARM架构比X86架构提升10%,性价比提升25%。 参考
即使真如阿里云所说,基于ARM架构的云数据库RDS在性能上提升了很多,但在真正使用前还是需 要验证下其性能。 在测试不同架构的MySQL之前,先 了解下 当前CPU的两种架构:X86和ARM(也可以直接到第4部分看 「 测试结果 」) 。
2. X86 vs ARM CISC(complex instruction set computer,复杂指令集计算机)和RISC(reduced instruction set computer,精简指令集计算机)是当前CPU的两种架构。它们的区别是对CPU设计理念和方法,虽然都是在体系结构、操作运行、软件硬件、编译时间等诸多因素中做出某种平衡,以求达到高效的目的,但因采用的方法不同导致在很多方面差异很大。X86架构采用CISC,而ARM采用RISC。
-
什么是X86架构
- 什么是ARM架构
- 二者区别
ARM系统几乎都采用Linux操作系统,而且大部分的硬件系统都要单独构建,与其他系统不能兼容,这一点严重制约了ARM系统的发展和应用。在2007年Google开发了Android系统,并统一了ARM架构的操作系统,以及Apple公司的助力(基于ARM的M1、M2),为ARM的发展提供了强大的支持。 扩展性: X86 架构的电脑采用“桥”的方式与扩展设备(如:硬盘、内存等)进行连接,由于X86架构统治了PC机近30年,其配套扩展的设备种类多,所以很容易进行扩展,如增加内存、硬盘等。
ARM 架构的电脑是通过专用的数据接口使CPU与数据存储设备进行连接,所以ARM的存储、内存等不容易扩展。 自由性: Intel 采用一个全封闭式的商业模式,从头到尾控制其整个设计和生产,并直接销售芯片。将其架构、CPU设计甚至制造完全保持在内部,利用垄断获取更大的利益。 ARM 是一个开放式的商业模式,自己并不生产处理器,而是 将芯片的设计方案授权给其他 硬件制造商 ,制造商可以根据市场需求修改和生产。这也是为什么ARM拥有众多拥护者的主要原因,华为、苹果、三星、英伟达、高通等都是ARM的代表。
3. 如何选择 在过去的十年里,随着生态系统越来越多地支持这两种架构,RISC和CISC之间的界限变得越来越模糊。但在可预见的未来,ARM仍是智能手机行业等移动领域的首选架构,Intel 在低功耗方面的努力多年来也有所改进,并且Intel在PC和服务器领域使用的X84-64架构在性能方面仍然领先ARM。 X86-64架构的服务器几乎是MySQL数据库的标配服务器。但随着云计算的不断发展,全球主流的云厂商为了降低总体成本和提高整体效率,都相继开始尝试用低功耗、低成本的ARM架构来作为数据库服务器。如阿里云在近期推出的基于ARM架构的RDS MySQL和RDS PostgreSQL。 本文将对部署在ARM和X86架构下的MySQL实例进行测试,来了解它们的性能差异。 4. 测试结果
通过对「读写」、「只读」、「只写」场景下的压测,并取压测结果QPS、TPS的平均值之和来统计, 得到结果 :
-
读写场景:「X86-RDS」和「ARM-RDS」差距不大(2%以内),近乎 持平 ;「X86-ECS」性能比「ARM-ECS」平均高17%左右。
-
只读场景:「X86-RDS」和「ARM-RDS」差距不大(3%以内),近乎 持平; 「X86-ECS」性能比「ARM-ECS」平均高20%左右。
-
只写场景:「X86-RDS」性能比「ARM-RDS」平均高15%左右(当CPU没有被打满差距不大,当CPU被打满差10% ~ 20%);「X86-ECS」性能比「ARM-ECS」平均高20%左右。
5.1 测试环境
-
异步复制
-
数据超过 innodb_buffer_pool_size
-
高性能模板参数
sync_binlog = 1000innodb_flush_log_at_trx_commit = 2innodb_flush_method = O_DIRECTinnodb_buffer_pool_size = 6gbinnodb_flush_neighbors = 0max_prepared_stmt_count = 1048575
- 实例规格
5.2 测试方法
5.3 测试场景-- 准备数据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=600 --threads={2~128} 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=600 --threads={2~128} --percentile=99 --report-interval=20 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=600 --threads={2~128} --percentile=99 --skip-trx=1 --report-interval=20 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=600 --threads={2~128} --percentile=99 --report-interval=20 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=600 --threads={2~128} --percentile=99 oltp_read_write/oltp_read_only/oltp_write_only cleanup
对读写、只读、只写三个场景,线程数从2到128进行压测说明。 5.3.1 读写场景 QPS:
TPS:
Latency:
- 在阿里云RDS for MySQL中,基于ARM架构和X86 架构的MySQL实例在「读写」、「只读」场景下,性能接近;在「只写」场景下,基于X86架构比 ARM架构的MySQL实例性能高15%。
- 在自建MySQL实例中,各场景下,本例中X86架构的服务器性能高于ARM架构的服务器20%,具体的性能会随着服务器CPU主频(GHz)不同而有所差异。
- 如果使用RDS MySQL,在满足性能的前提下(读写差不多或读多写少),从性价比上选择,首选 ARM 架构的实例;要是写的压力比较大(写远高于读),首选X86架构的实例。
- 如果使用自建MySQL,首选X86架构的实例(在CPU主频区别不大的情况下)。
另外,此次性能测试的结果和阿里云宣传的有一些差异。咨询了阿里云的工作人员,给出的答复是: 邀测获得免费ARM架构的RDS MySQL实例,其内核及所在的ECS不是最终商业化后的。在商业化后,RDS内核及ECS配置会更新,性能会有进一步提升。
补充,在 MySQL On ARM的文章中: 自建MySQL实例, 在低负载下,ARM和X86架构在读性能上差距不大,在高负载下,X86的性能要优于ARM;在有写的场景下,ARM要差于X86架构。
参考文档
https://en.wikipedia.org/wiki/X86
https://en.wikipedia.org/wiki/ARM_architecture_family https://www.redhat.com/en/topics/linux/what-is-arm-processor https://www.makeuseof.com/x86-vs-arm-which-architecture-should-pc-use https://mysqlonarm.github.io/MySQL-on-x86-vs-ARM