1. 摘要

近期,阿里云推出基于 ARM 架构的 RDS MySQL 和 RDS PostgreSQL 实例,现处于邀测阶段,阿里云宣传 ARM 架构的亮点是:在价格下降13%的基础上,平均性能 ARM 架构比 X86 架构提升10%,性价比提升25%参考

该选择哪种CPU架构给MySQL实例呢?只有通过测试才能得出结论。在测试不同架构的MySQL之前,先了解下当前CPU的两种架构:X86 和 ARM。也可以直接到第4部分看「测试结果」。

具体的信息可以看:MySQL该使用哪种CPU架构服务器

关注公众号  ,能够第一时间了解行业动态。

2. X86 vs ARM

CISC(complex instruction set computer,复杂指令集计算机)和 RISC(reduced instruction set computer,精简指令集计算机)是当前CPU的两种架构。它们的区别是不同的CPU设计理念和方法,虽然都是在体系结构、操作运行、软件硬件、编译时间等诸多因素中做出某种平衡,以求达到高效的目的,但因采用的方法不同导致在很多方面差异很大。X86架构采用CISC,而 ARM 采用 RISC。

  • 什么是X86架构
    X86 是Intel在1978年推出,是当时最先开发制造的一种微处理器体系的结构。目前的PC架构绝大多数都是Intel的 X86 架构,也是因为该架构造让Intel统治整个CPU产业链长达数十年。
    X86 基于CISC,是一种微处理器指令集架构,每个指令可执行若干操作,以增加处理器本身复杂度作为代价,去换取更高的性能,增加了功耗和设计难度

  • 什么是ARM架构
    ARM 成立于1991年,是全球领先的半导体知识产权提供商(ARM Holdings)。采用将芯片的设计方案授权给其他硬件制造商,该方式使它在全球上有了上百个合作伙伴:高通、华为、联发科、飞思卡尔、TI等。
    相较于 X86 架构处理器,ARM 架构则大幅简化架构,仅保留所需要的指令。虽在最初的PC架构中败给 Intel 主导的 X86 架构,但其低成本、高性能和低功耗的特性,让它在移动市场比 X86 更具优势,如智能手机、平板电脑、嵌入式系统等。

  • 二者区别
    X86是服务器市场的主流架构,而 ARM 是目前最普及的移动电子设计方案的架构。几乎所有智能手机以及其他小型移动设备和笔记本电脑都采用的是 ARM 架构。从下面几方便大致了解下它们间的一些差异,关于更多的信息可以查看文章最后部分的参考文档。

    • 性能:
      X86 架构比 ARM 架构的系统在性能方面要强得多。X86 追求的是性能,而ARM 架构的处理器则致力于实现成本与更小尺寸、更低功耗、更长电池使用时间之间的平衡,以能效为目标。

    • 兼容性:
      X86 架构比 ARM 架构的系统在兼容性方面要好得多。X86 由微软及Intel构建的Wintel联盟垄断了个人电脑操作系统近30年,在硬件和软件开发方面已经形成统一的标准。
      ARM 系统几乎都采用Linux操作系统,而且大部分的硬件系统都要单独构建,与其他系统不能兼容,这一点严重制约了 ARM 系统的发展和应用。在2007年Google开发了Android系统,并统一了 ARM 结构的操作系统,以及Apple公司的助力(基于 ARM 的M1、M2),为 ARM 的发展提供了强大的支持和动力。

    • 扩展性:
      X86 架构的电脑采用“桥”的方式与扩展设备(如:硬盘、内存等)进行连接,由于 X86 架构统治了PC机近30年,其配套扩展的设备种类多,所以 X86 架构很容易进行扩展,如增加内存、硬盘等。
      ARM 架构的电脑是通过专用的数据接口使CPU与数据存储设备进行连接,所以 ARM 的存储、内存等不容易扩展。

    • 自由性:
      Intel是一个全封闭式的商业模式,从头到尾控制其整个设计和生产,并直接销售芯片。将其架构、CPU 设计甚至制造完全保持在内部,利用垄断获取更大的利益。
      ARM 是一个开放式的商业模式,自己并不生产处理器,而是将芯片的设计方案授权给其他硬件制造商,制造商可以根据市场需求修改和生产。这也是为什么ARM拥有众多拥护者的主要原因,华为、苹果、三星、英伟达、高通等都是 ARM 的代表。

3. 如何选择

在过去十年到现在,随着生态系统越来越多地支持这两种架构,RISC 和 CISC 之间的界限变得越来越模糊。但在可预见的未来,ARM 仍是智能手机行业等移动领域的首选架构,Intel 在低功耗方面的努力多年来也有所改进,并且Intel 在PC和服务器领域使用的 X84-64 架构在性能方面仍然领先ARM。MySQL 是目前最流行的关系型数据库管理系统,X86-64架构的服务器几乎是其标配。但随着云计算的不断发展,全球主流的云厂商为了降低总体成本和提高整体效率,都相继开始尝试用低功耗、低成本的 ARM 架构来作为数据库服务器。如阿里云在近期推出的基于ARM 架构的 RDS MySQL和 RDS PostgreSQL。

本文将对部署在不同架构服务器上的 MySQL 实例进行测试,来了解下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. 测试说明

5.1 测试环境

  • 异步复制

  • 数据超过 innodb_buffer_pool_size

  • 高性能模板参数

    sync_binlog                     = 1000
    innodb_flush_log_at_trx_commit = 2
    innodb_flush_method = O_DIRECT
    innodb_buffer_pool_size = 6gb
    innodb_flush_neighbors = 0
    max_prepared_stmt_count = 1048575
  • 实例规格

5.2 测试方法

-- 准备数据
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

5.3 测试场景

对读写、只读、只写三个场景,线程数从2到128进行压测说明。

5.3.1 读写场景

QPS:

TPS:

Latency:

5.3.2 只读场景

QPS:

TPS:

Latency:

5.3.3 只写场景

QPS:

TPS:

Latency:

最后,从「测试说明」里得出:

  • 在阿里云RDS for MySQL中,基于ARM架构和X86 架构的MySQL实例在「读写」、「只读」场景下,性能接近;在「只写」场景下,基于X86架构比 ARM架构的MySQL实例性能高15%。

  • 在自建MySQL实例中,各场景下,本例中X86架构的服务器性能高于ARM架构的服务器20%,具体的性能会随着服务器CPU主频(GHz)不同而有所差异。

6. 总结

所以,最后可以回答标题中的问题了:MySQL该使用哪种CPU架构服务器?

  • 如果使用RDS MySQL,在满足性能的前提下(读写差不多或读多写少),从性价比上选择,首选 ARM 架构的实例;要是写的压力比较大(写远高于读),首选X86架构的实例。

  • 如果使用自建MySQL,首选X86架构的实例(在CPU主频区别不大的情况下)。

另外,此次性能测试的结果和阿里云宣传的有一些差异。咨询了阿里云的工作人员,给出的答复是:邀测获得免费ARM架构的RDS MySQL实例,其内核及所在的ECS不是最终商业化后的。在商业化后,RDS内核及ECS配置会更新,性能会有进一步提升。

补充,在MySQL On ARM的文章中:自建MySQL实例,在低负载下,ARM和X86架构在读性能上差距不大,在高负载下,X86的性能要优于ARM;在有写的场景下,ARM要差于X86架构。

 

参考文档

[redhat] https://www.redhat.com/en/topics/linux/what-is-arm-processor

[wikipedia] https://en.wikipedia.org/wiki/ARM_architecture_family

[wikipedia] https://en.wikipedia.org/wiki/X86

[androidauthority] Arm vs x86: Instruction sets, architecture, and all key differences explained

其他

https://bbs.elecfans.com/m/jishu_2099774_1_1.html

https://m.elecfans.com/article/678193.html

https://server.zol.com.cn/354/3542316.html

https://www.makeuseof.com/x86-vs-arm-which-architecture-should-pc-use/

https://www.makeuseof.com/tag/cpu-technology-explained/

https://engineering.carsguide.com.au/arm-versus-x86-for-database-server-comparison-review-8911d3c582e9

https://mysqlonarm.github.io/MySQL-on-x86-vs-ARM/

MySQL该使用哪种CPU架构服务器?的更多相关文章

  1. 几种CPU架构

    原文链接:http://blog.csdn.net/wyzxg/article/details/5027738 这几天在下载RPM包的时候,总会看见x86,x86-64,IA64,i386,i586等 ...

  2. 聊聊MySQL常用的4种主从复制架构

    目录 一主多从复制架构 多级复制架构 双主(Dual Master)复制架构 多源(Multi-Source)复制架构 如何优化主从延迟问题? 复制的4中常见架构有一主多从复制架构.多级复制架构.双主 ...

  3. Android app中的so库和CPU架构

    一.android目前有几种cpu架构? 早期的Android系统几乎只支持ARMv5的CPU架构,目前支持七种CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MI ...

  4. 防止服务器宕机时MySQL数据丢失的几种方案

    这篇文章主要介绍了防止服务器宕机时MySQL数据丢失的几种方案,结合实践介绍了Replication和Monitor以及Failover这三个项目的应用,需要的朋友可以参考下. 对于多数应用来说,My ...

  5. [转]MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验

    本文转自:http://liangweilinux.blog.51cto.com/8340258/1728131 年,嘿,废话不多说,下面开启MySQL优化之旅! 我们究竟应该如何对MySQL数据库进 ...

  6. Mysql表的七种引擎类型,InnoDB和MyISAM引擎对比区别总结

    InnoDB和MyISAM区别总结 我用MySQL的时候用的是Navicat for MySQL(Navicat for mysql v9.0.15注册码生成器)操作库.表操作的,默认的表就是Inno ...

  7. MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验

    原文地址:http://liangweilinux.blog.51cto.com/8340258/1728131 首先在此感谢下我的老师年一线实战经验,我当然不能和我的老师平起平坐,得到老师三分之一的 ...

  8. MySQL 调优基础(一) CPU与进程

    一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ...

  9. qlserver、Mysql、Oracle三种数据库的优缺点总结

    这篇文章主要介绍了sqlserver.Mysql.Oracle三种数据库的优缺点总结,需要的朋友可以参考下   一.sqlserver优点:易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能 ...

随机推荐

  1. DIN 66025标准下G Code基础代码释义

    基础/前提 XYZ指示常规的三个轴号,PQUVW为可以增加的五个轴,ABC为可以增加的旋转轴 实例 G0 快速定位(点位运动) G1 直线运动(插补) G2 顺时针圆弧运动(插补) G3 逆时针圆弧运 ...

  2. DataGridView控件绑定数据之后,置顶操作

    一个小小的置顶,就搞了半个小时,还是记录一下吧. 1.第一个问题就是datatable的插入只能是Insert DataRow,但是获取选中的行,都是DataGridViewRow,不能直接转换. 找 ...

  3. kafka详解(一)--kafka是什么及怎么用

    kafka是什么 在回答这个问题之前,我们需要先了解另一个东西--event streaming. 什么是event streaming 我觉得,event streaming 是一个动态的概念,它描 ...

  4. KingbaseES Hint 使用

    前言:KingbaseES V8R6C4 之前版本hint 使用方法是与Postgresql 相同的,通过 pg_hint_plan扩展,支持在SQL中使用hint.由于该版本的hint只能放置于SQ ...

  5. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(18)-Fiddler如何接口测试,妈妈再也不担心我不会接口测试了

    1.简介 Fiddler最大的优势在于抓包,我们大部分使用的功能也在抓包的功能上,fiddler做接口测试也是非常方便的. 领导或者开发给你安排接口测试的工作任务,但是没有给你接口文档(由于开发周期没 ...

  6. Hive的基本知识与操作

    Hive的基本知识与操作 目录 Hive的基本知识与操作 Hive的基本概念 为什么使用Hive? Hive的特点: Hive的优缺点: Hive应用场景 Hive架构 Client Metastor ...

  7. 【面试题】JS第七种数据类型Symbol详解

    JS第七种数据类型Symbol详解 点击打开视频讲解更加详细 一.什么是Symbol? Symbol是ES6中引入的一种新的基本数据类型,用于表示一个独一无二的值.它是JavaScript中的第 七种 ...

  8. Macos下用pycharm运行django项目死活安装不上mysqlclient怎么办!!??

    花了我三天时间,佛了 我刚从win过渡到mac,想着把代码迁移一下. 然后看到依赖里面有一个mysqlclient,然后pip3 install死活装不上 解决方案: 在这里写上这个 然后就好,死了

  9. 自定义异常、Java网络编程

    day04 throw关键字 throw用来对外主动抛出一个异常,通常下面两种情况我们主动对外抛出异常: 1:当程序遇到一个满足语法,但是不满足业务要求时,可以抛出一个异常告知调用者. 2:程序执行遇 ...

  10. [Python]-string-字符串

    字符串是Python中很常用的数据类型,此处记录一些典型用法并随时更新. split()方法 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串. 两个参数st ...