• 一直都在非常深度调研、关注和使用云数据库,其中性能是关注的重点之一。一方面性能是最终成本的重要影响因素,更好的性能,通常意味着使用更少的资源支撑更高的业务量,从而降低整体成本。另外,性能还意味着在极端场景下,数据库的上限支撑能力。

    所以,近期对各个云数据库厂商做了一个较为系统的性能对比,供开发者和企业在云数据库选型时的参考。

    在进行大量测试之后,对主要的云厂商分别选择了一个“企业级规格”(适合生产环境配置的)进行了对比。先看性能对比如下图:

    可以看到:

    • 华为云数据库(红色),在中高并发度时(>=16),性能最强,且高于第二名约18%;
    • 腾讯云数据库(紫色),在低并发时(<=8),性能最强,高于第二名约15%;
    • 百度云数据库(淡蓝色),在中高并发时(>16),性能跃居第二,仅次于华为云;
    • 阿里云数据库(黄色)和谷歌云数据库(绿色)在低并发时也都有不错的表现,高并发之后性能则持续稳定在850 tps。这两家云数据库的响应延迟,表现得也非常接近。
    • 亚马逊云数据库(Amazon RDS,蓝色)和微软Azure云在中低并发时,表现出了较为相近的性能趋势,且性能较低。但是在高并发时,两者都表现出了非常强的扩展性,AWS RDS在96和128并发时,性能超过阿里云、腾讯云、谷歌云等,跃居第三;同样的,微软Azure云的数据库在高并发时也超过了阿里云、谷歌云,也有不错的性能表现。
    (more…)
  • TL;DR:用8.0系列中的8.0.34之后的版本,该系列版本后续主要以保障稳定、修复bug为主。MySQL 8.1、8.2都是“创新版”,很长时间都会快速迭代,稳定性要差一些,而且目前还不确定会添加哪些新功能在里面。9.0官方预计1年后就会发布,不过不重要,也会先发布Innovation版。

    MySQL在今年7月正式引入了新的版本发布模式,引入了包括8.1、8.2等版本。新的版本,给MySQL的新特性开发带了很大的好处,也让开发者容易变得困惑。这里概述一下各个版本,以及后续的版本发布规划,帮助开发者们在生产环境选择自己合适的版本。

    • 从MySQL 8.0.34开始,8.0系列将以Bugfix为主,保障稳定,是当前的LTS(Long Term Support)版本,一直到EOL(约为2026年4月)
    • 8.1/8.2版本,当前都是Innovation版本,预计在一年后,发布新的LTS版本;8.1 / 8.2 版本目前来看,还没有什么特别的功能引入,期待后续迭代
    • 对于LTS版本,其生命周期是标准的5+3年,5年“完整支持”、3年“扩展支持”
    • 预计8.4会是下一个LTS版本,在下一个LTS版本发布的时候,9.0就会正式发布,所以,9.0版本可能会在一年后就发布。届时,8.4就是8.x的LTS版本,同时发布9.0版本(Innovation版)。
    • Innovation版本,可以理解为,MySQL的官方工程师们可以“大刀阔斧”的做一些修改,除了添加新功能外,还可能删除某个功能、重构某个功能等。
    • MySQL 8.0的Premier Support将会到2025年4月;Extended Support 会到2026年4月

    参考:

  • 这是一个云数据库性能的系列文章,包含了:

    在前篇中(参考),较为详细的对比x86和Graviton 2(AWS推出第二代ARM芯片)的性能。Graviton 3实例在今年的4月份支持了RDS数据库(参考)。这里,我们再系统的看看m7g实例(Graviton 3)、m6g实例(Graviton 2)、m5实例(Intel Xeon)、m6i实例(第三代Intel Xeon/Ice Lake)的RDS性能(包括性价比)表现如何。

    测试结论

    参考下图。整体上,在中低并发时,m6i实例(第三代Intel Xeon/Ice Lake)、m5实例(Intel Xeon)性能要比m7g实例(Graviton 3)、m6i实例(第三代Intel Xeon/Ice Lake)实例要略微高一些。即,低并发时,x86实例性能要高出约10%

    在超高并发的时候性能表现:m7g实例 > m6i实例 > m6g实例 ~ m5实例。在超高并发下,m7g、m6i实例表现出了非常强的扩展性和吞吐量,m7g实例吞吐量最高,甚至高出m6i实例10%;相比m6g、m5实例,m7g实例性能则要高出30%

    为了更加直观对比性价比,这里选取了16并发的性能进行对比。m7g实例在16并发下,tps为314,价格为$0.936/小时;m6i实例的tps为336,价格为$0.94/小时。所以,m6i实例(x86)性价比要比m7g实例(Graviton 3)更高,高出约:6%。在超高并发时(128并发),m7g实例(Graviton 3)实例性价比才比m6i实例(x86)要更高,高出约:10%。不过,无论怎样,这与AWS宣称的Graviton实例性价比更高的结论是不一致的。

    测试模型说明

    这里使用了sysbench的读写混合模型(oltp_read_write)进行测试,单表大小为100万,共十个表,单次测试时长为300秒,分别测试了如下的并发度的性能表现:2 4 8 16 24 32 48 64 96 128

    实例配置与价格

    这里关注db.m7g.xlarge、db.m6i.xlarge实例价格,m6g、m5实例的价格可以参考前篇。以东京地区、多可用区实例价格为参考:

    实例配置与之前的测试保持一致。选择了较为常用4c16gb的实例进行测试,各个选项尽量选择默认选项,以更加接近的模拟用户实际场景,具体的,版本是AWS多可用区版、存储默认加密、gp3存储、100GB空间、3000 IOPS、Performance Insight也默认开启。

    详细的测试数据参考

    AWS RDS Graviton 3(db.m7g.xlarge/gp3/100gb/3000iops)

    threads|transactions| queries| time |avg/Latency|95%/Latency
    2|       10847|  216940|300.04|      55.32|     127.81
    4|       25897|  517940|300.00|      46.34|      51.94
    8|       49010|  980200|300.05|      48.97|      55.82
    16|       94335| 1886700|300.05|      50.89|      58.92
    24|      141987| 2839740|300.05|      50.71|      59.99
    32|      185996| 3719920|300.05|      51.62|      62.19
    48|      268264| 5365280|300.05|      53.68|      68.05
    64|      341468| 6829360|300.06|      56.23|      74.46
    96|      446113| 8922260|300.06|      64.56|      92.42
    128|      491663| 9833260|300.09|      78.11|     121.0

    AWS RDS x86(第三代Intel Xeon/Ice Lake)(db.m6i.xlarge/gp3/100gb/3000iops)

    threads|transactions| queries| time |avg/Latency|95%/Latency
    2|       13281|  265620|300.02|      45.18|     112.67
    4|       29635|  592700|300.04|      40.49|      47.47
    8|       53875| 1077500|300.04|      44.55|      53.85
    16|      100785| 2015700|300.07|      47.63|      57.87
    24|      150515| 3010300|300.04|      47.84|      59.99
    32|      193195| 3863900|300.05|      49.69|      63.32
    48|      273454| 5469080|300.08|      52.67|      69.29
    64|      343939| 6878780|300.05|      55.83|      75.82
    96|      408551| 8171020|300.09|      70.50|      99.33
    128|      438708| 8774160|300.06|      87.54|     123.28

    小结

    经过较为详细的测试,可以看到,在RDS数据库的场景下,无论是第二代自研芯片Graviton2,还是第三代Graviton3,相比于x86芯片在性价比上并没有特别明显的优势。而在更加常见的低并发的场景下,x86实例的性价比依旧是更高的。在超高并发时,Graviton3实例虽然表现出了一些性价比优势,但是,如此高的并发,其实在实际应用中,并不常见。

    另外,第三代Graviton3相比第二代Graviton2的性能提升也是非常明显,大概有10~40%的性能提升

    当然,这应该也是符合预期的结论,毕竟在大原则上,处理复杂的负载x86芯片应该更有优势;对简单的场景、更低功耗的场景,Graviton(ARM)芯片是更有优势的。对于数据库来说,涉及到事务处理、磁盘IO、大量的比较判断等,还是比较复杂的。不过,依旧期待未来,Graviton做更多的适配与正对性的优化,以获得更高的性价比,从而降低最终降低使用RDS的成本。

    参考

  • 阿里云为ECS提供最新版本的是Alibaba Cloud Linux 3系统(3.2104 LTS 64位),根据Release Notes可以确定这是一个“CentOS 8、RHEL 8”兼容版,开始安装吧。

    1. 下载,并添加MySQL官方Yum仓库

    下载时选择Red Hat Enterprise Linux 8版本即可。

    # 下载,Centos 8版本:
    wget https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm
    
    # 如果是你 Centos 7,那么可能是如下命令:
    wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
    
    # 安装配置仓库(Centos 8)
    sudo yum localinstall mysql80-community-release-el8-9.noarch.rpm
    
    # 确认与检查
    yum repolist enabled | grep mysql.*-community
    mysql-connectors-community MySQL Connectors Community
    mysql-tools-community      MySQL Tools Community
    mysql80-community          MySQL 8.0 Community Server

    2. 打开或关闭需要的子仓库

    如上面的输出,可以看到,8.0版本(mysql80-community)子仓库是默认打开的。如果要安装8.0版本,则可以跳过这一步了。但,如果要安装其他版本,例如你希望安装innovation版本,那么可以通过关闭8.0仓库,打开innovation版本子仓库的方式解决。

    # 查看有哪些子仓库,以及是否打开
    yum repolist all | grep mysql
    
    # 如果需要的话,可以禁用8.0子仓库,打开innovation版子仓库
    yum-config-manager --disable mysql80-community
    yum-config-manager --enable mysql-innovation-community
    

    我们总是可以通过yum repolist命令查看所有仓库的状态:

    yum repolist
    yum repolist enabled
    yum repolist disabled

    3. 安装需要的MySQL-Server软件

    # 查看仓库和版本
    yum list mysql-community-server
    mysql-community-server.x86_64      8.2.0-1.el8      mysql-innovation-community
    
    # 安装MySQL 8.2.0
    yum install mysql-community-server
    ...
    Complete!

    4. 启动数据库

    这是一个默认启动。

    systemctl start mysqld

    总是可以通过如下命令启动/关闭/重启或查看MySQL-Server的状态。

    systemctl start mysqld
    systemctl stop mysqld
    systemctl restart mysqld
    systemctl status mysqld

    默认的配置文件

    cat /etc/my.cnf
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

    5. 使用root账号登录数据库

    MySQL在启动时,会随机生成一个默认的root密码,首次登录需要获取该密码,并在登录后,立刻修改密码。

    获取密码:
    # 从日志文件中获取密码
    grep 'temporary password' /var/log/mysqld.log
    [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: p!5h)W9DikW/
    登录并修改密码:
    # 登录
    mysql -uroot -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 10
    Server version: 8.2.0
    
    Copyright (c) 2000, 2023, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    # 修改默认的root密码
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

    6. 一种不安全、但是偷懒的做法

    这是一种非常不安全的做法,但是很方便:可以在配置文件(my.cnf)中新增skip-grant-tables=ON参考)来关闭MySQL的用户认证与鉴权体系,谨慎使用

    这时候,就可以没有任何密码,不用关注任何权限去登录与使用数据库。不过,为了安全考虑,该参数打开后,数据库也会禁用所有远程的连接,仅允许本地的访问。

    EOF

    参考:

  • 概述

    在2018年,AWS首次推出Graviton EC2实例,2020年7月AWS RDS正式支持Graviton 2的实例,就在前两天,在最新的AWS re:Invent大会上,AWS已经推出了第四代Graviton 4实例。现在,AWS的Graviton已经较为成熟,也在大量的企业和应用被广泛使用。AWS官方也宣称使用Graviton 2的RDS实例能够有52%的性价比提升(参考)。这里,来通过标准的Sysbench测试来实测一下,看看实际Graviton 2实例的效果。

    与上次阿里云测试相同,这次依旧是使用了同样的测试工具和场景,对较为常用的4c16gb,即db.m6g.xlarge和db.m5.xlarge实例,进行并发数分别为2 4 8 16 24 32 48 64 96 128的测试。

    测试结论

    在性能上,平均来看,x86要比Graviton实例性能高约12.7%;x86规格延迟要比Graviton规格低15%。也注意到,在超高并发的情况下(并发超过96时),Graviton实例与x86实例无论是在性能,还是延迟上,是比较接近的,不过,这时候系统压力太大、延迟太高,对实际使用并没有太大的参考价值。

    为了更加直观的做性价比的比较,这里选取16并发时的数据进行对比。在16并发下,Graviton实例的TPS是275,db.m6g.xlarge价格是$0.836/小时;x86实例的TPS是341,价格是$0.94/小时。那么每100TPS,Graviton价格是0.304,x86是0.275。所以,在16并发时,相比之下,x86规格的性价比更高,高出Graviton实例10%。这个结果与测试之前预期还是非常不一样的,也与AWS宣称的完全不同。

    只有在超高的并发情况下(96/128并发),Graviton实例的吞吐量才与x86接近,这时,Graviton实例才表现出接近10%的性价比优势。但这种高并发在实际场景中并不是常态,所以并没有很强的参考价值。

    这个测试结果与预期的差别比较大,所以后来又再做过一次测试,结果与这次基本相同。所以,性能到底怎样,还是最终要自己实际测试,因为宣传的数据,通常都是非常极端的适配该产品的场景,并不是真实的场景。

    一下两幅图分别是TPS和平均延迟的对比图:

    横坐标是sysbench的并发线程数,纵坐标分别为tps和平均的延迟。

    测试模型说明

    这里使用了sysbench的读写混合模型(oltp_read_write)进行测试,单表大小为100万,共十个表,单次测试时长为300秒,分别测试了如下的并发度的性能表现:2、4、8、10、12、14、16、24、32

    实例配置与价格

    这里选择了较为常用4c16gb的实例进行测试,各个选项尽量选择默认选项,以更加接近的模拟用户实际场景,具体的,版本是AWS默认的8.0.33、多可用区版、存储默认加密、gp3存储、100GB空间、3000 IOPS、Performance Insight也默认开启。完整的选项参考如下:

    AWS的价格分为计算节点价格(CPU与内存)、存储价格、IOPS价格,这里仅关注计算节点价格。存储和IOPS对于ARM和x86实例来说,是相同的。这里的选择的是东京地区、多可用区实例的价格,如下:

    后续,也还将测试基于 io1(Provisioned IOPS SSD) 存储的RDS。

    详细测试数据参考

    AWS RDS Graviton(db.m6g.xlarge/gp3/100gb/3000iops/8.0.33)

    threads|transactions| queries| time |avg/Latency|95%/Latency
          2|       11951|  239020|300.03|      50.21|      55.82
          4|       23322|  466440|300.04|      51.45|      57.87
          8|       43654|  873080|300.05|      54.98|      65.65
         16|       82519| 1650380|300.05|      58.17|      70.55
         24|      120541| 2410820|300.06|      59.74|      73.13
         32|      156680| 3133600|300.07|      61.28|      74.46
         48|      218709| 4374180|300.06|      65.85|      81.48
         64|      269430| 5388600|300.08|      71.27|      90.78
         96|      329366| 6587320|300.07|      87.45|     121.08
        128|      351579| 7031580|300.11|     109.24|     164.45

    AWS x86实例(db.m5.xlarge/gp3/100gb/3000iops/8.0.33)

    threads|transactions| queries| time |avg/Latency|95%/Latency
          2|       13357|  267140|300.03|      44.92|     112.67
          4|       27539|  550780|300.03|      43.57|      50.11
          8|       55330| 1106600|300.04|      43.38|      51.94
         16|      102408| 2048160|300.05|      46.87|      56.84
         24|      145718| 2914360|300.05|      49.41|      61.08
         32|      186619| 3732380|300.05|      51.44|      63.32
         48|      260415| 5208300|300.04|      55.30|      69.29
         64|      306939| 6138780|300.08|      62.56|      82.96
         96|      330131| 6602620|300.09|      87.25|     123.28
        128|      348095| 6961900|300.12|     110.34|     155.80

    小结

    AWS RDS在发布Graviton 2实例时,曾宣传Graviton 2实例有52%的性价比提升。但是在这里的Sysbench混合读写的测试场景下,反而是x86性价比优势更加明显,16并发是,x86性价比要高出Graviton实例10%。而仅是在超高并发时,Graviton实例性价比才比x86高10%。但是,一般我们不会让4c16的实例,运行在如此高的压力下,所以后面这种情况的参考意义并不强。

    虽然AWS曾大量宣传Graviton实例,但是实测下来并没有什么性价比的优势。所以,在数据库应用场景下,使用AWS Graviton实例的必要性,似乎并不高。另外,也注意到,RDS Graviton 3的实例一直都没有推出,也许这是其中的原因之一。

    参考

  • 概述

    在之前,我们看到阿里云RDS的经济版(ARM)性价比要比x86高约31.5%。这是一个系列,这次我们来看看华为云的RDS MySQL的”通用型”(x86)与”鲲鹏通用增强型”(ARM)版本的情况如何。

    这里依旧选择了用户较为常用的4c16g的规格进行测试,测试工具使用了sysbencholtp_read_write模型进行测试。配置参数与选项,均尽量使用RDS购买过程中的默认选项,以给出更加接近用户使用时的配置。具体的,使用了华为云SSD云盘存储,选择了MySQL 8.0实例。

    结论

    在华为云上,x86与鲲鹏架构的RDS规格价格几乎是相同的。可以看到,鲲鹏版本的RDS相比x86版本约有15~45%的性能差距。不过,也必须要考虑,当下华为所处的“技术封锁”环境,以及自研鲲鹏芯片在中国自主可控芯片中的重要地位,在国内大量无法使用x86的场景中,这个性能下降是完全可以接受。另外,在当下复杂的地缘政治背景下,在更多的场景中使用自研芯片也是非常有必要的。

    测试方法说明

    这里使用了sysbench的读写混合模型(oltp_read_write)进行测试,单表大小为100万,共十个表,单次测试时长为300秒,分别测试了如下的并发度的性能表现:2、4、8、16、24、32、48、64、96、128。

    测试使用的华为云RDS的主备跨可用区、高可用、SSD云盘、MySQL 8.0版本。

    规格与价格详情

    详细测试数据参考

    鲲鹏通用增强型的4c16g实例的测试详细结果如下:

    threads|transactions| queries| time |avg/Latency|95%/Latency
          2|       59875| 1197500|300.01|      10.02|      13.46
          4|      110962| 2219240|300.01|      10.81|      15.00
          8|      195460| 3909200|300.01|      12.28|      17.32
         16|      275443| 5508860|300.02|      17.43|      23.95
         24|      314560| 6291200|300.02|      22.89|      32.53
         32|      339116| 6782320|300.02|      28.31|      41.10
         48|      366827| 7336540|300.03|      39.26|      58.92
         64|      377796| 7555920|300.02|      50.82|      80.03
         96|      376462| 7529240|300.06|      76.51|     134.90
        128|      381086| 7621720|300.09|     100.78|     161.51

    通用型(x86版本) 4c16g实例的测试详细结果如下:

    threads|transactions| queries| time |avg/Latency|95%/Latency
          2|       70027| 1400540|300.01|       8.57|      10.84
          4|      131431| 2628620|300.01|       9.13|      11.87
          8|      232901| 4658020|300.01|      10.30|      13.70
         16|      381979| 7639580|300.02|      12.56|      17.01
         24|      484093| 9681860|300.02|      14.87|      20.37
         32|      558496|11169920|300.02|      17.19|      23.52
         48|      641926|12838520|300.03|      22.43|      31.37
         64|      683710|13674200|300.03|      28.08|      40.37
         96|      688588|13771760|300.04|      41.83|      69.29
        128|      696658|13933160|300.05|      55.12|      81.48

    小结

    自2019年,华为被美国列入“出口管制实体名单”以来,依旧可以在华为云上买到鲲鹏芯片已经是某种意义的重大突破。在实际测试过程中,相同的价格,约有30%的性能下降,考虑到鲲鹏芯片在国产芯片中的位置,依旧是非常出色的产品。在国产化要求高的场景,以及未来规划考虑国产化的场景,都可以开始尝试使用。华为,加油!