MySQL该使用哪种CPU架构服务器?( 二 )


  • 自由性: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                     = 1000innodb_flush_log_at_trx_commit  = 2innodb_flush_method             = O_DIRECTinnodb_buffer_pool_size         = 6gbinnodb_flush_neighbors          = 0max_prepared_stmt_count         = 1048575
    • 实例规格
      MySQL该使用哪种CPU架构服务器?

      文章插图
    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

    经验总结扩展阅读