全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
云服务器 ECS

MySQL在ECS的重要实践

更新时间:2017-11-06 14:28:53

阿里云的企业级家族(独享实例的SLA性能是有保证的)如下图所示。

1

MySQL 对 I/O 的低延迟非常敏感,同时对网络 PPS 要求也很高。基于 MySQL 这 2 个特性,推荐使用网络增强 + SSD 云盘的规格族 ecs.sn2ne以及本地 SSD 型的规格族 I1 和 I2。

官网介绍中,SSD 云盘的单盘最大 IOPS 是 20000,延时 ms 级,而 SSD 本地盘的单盘最大 IOPS 是 240000,延时 us 级。不同盘使得MySQL性能差别很大,下面的测试可以对此进行验证。

测试验证

测试方法

  • 测试软件: percona-5.7.19-17

  • 测试对象:

    • ecs.sn2ne.8xlarge 32C/128G+1TB SSD云盘
    • ecs.i1-c10d1.8xlarge 32C/128G+1456G SSD本地盘
  • 测试工具:Sysbench 1.0.9

  • 测试架构:

    2

  • 压测命令:

  1. /usr/local/sysbench/bin/sysbench /usr/local/sysbench/share/sysbench/oltp_read_write.lua \
  2. --mysql-host=目标IP \
  3. --mysql-port=3306 \
  4. --mysql-user=root \
  5. --mysql-password='mysql密码' \
  6. --mysql-db=dbtest1a \
  7. --db-driver=mysql \
  8. --tables=10 \
  9. --table-size=10000000 \
  10. --report-interval=10 \
  11. --threads=64 \
  12. --time=120 \
  13. prepare/run/cleanup
  • 测试步骤

    1. 不做任何优化的压测。
    2. 做优化后的压测。

参数调优

  • 系统参数调优。

    1. 开启多队列。
    2. 文件打开数增大。
  • MySQL参数调优。

    • innodb_buffer_pool_size: 缓存 innodb 表的索引,数据,插入数据时的缓冲。MySQL 默认的值是 128M。官方推荐使用物理内存的 70%-80%。现在设置是:100GB。

    • innodb_log_file_size: 表示在一个日志组每个日志文件的字节大小,默认 48MB,对于写很多尤其是大数据量时非常重要。要注意,大的文件提供更高的性能,但数据库恢复时会用更多的时间。一般用 64M-512M,具体取决于服务器的空间。

      该参数决定了 recovery speed。太大的话 recovery 就会比较慢,太小了影响查询性能,一般取 256M 可以兼顾性能和 recovery 的速度。现在设置是512M。

    • innodb_flush_log_at_trx_commit:参数指定了 InnoDB 在事务提交后的日志写入频率。当取值为 1 时,每次事务提交时,log buffer 会被写入到日志文件并刷写到磁盘,这也是默认值,这是最安全的配置,但由于每次事务都需要进行磁盘I/O,所以也最慢。当取值为 2 时,每次事务提交会写入日志文件,但并不会立即刷写到磁盘,日志文件会每秒刷写一次到磁盘。取值为 0 的时候,log buffer 会 每秒写入到日志文件并刷写(flush)到磁盘。

      对于一些数据一致性和完整性要求不高的应用,配置为 2 就足够了;如果为了最高性能,可以设置为 0。有些应用,如支付服务,对一致性和完整性要求很高,所以即使最慢,也最好设置为 1。现在设置是2。

    • innodb_flush_method:推荐设置 O_DIRECT。

测试结论

3

规格族 I1 的 SSD 本地盘性能比 SSD 云盘性能好很多。推荐规格族 I1 或者 I2。

本文导读目录