提高MySQL I / O性能(硬件和分区)

时间:2013-10-08 13:17:55

标签: mysql performance io amazon-ec2 hardware

我需要提高数据库的I / O性能。我正在使用下面描述的“2xlarge”硬件&考虑升级到“4xlarge”HW(http://aws.amazon.com/ec2/instance-types/)。谢谢你的帮助!

详细信息:

CPU使用率很好(通常低于30%),正常运行时间平均负载从0.5到2.0(但我相信我应该把它除以CPU的数量),这样看起来还不错。但是,I / O很糟糕:iostat显示有利的服务时间,但队列中花费的时间(我想这意味着等待访问磁盘)太高了。我已经将MySQL配置为每1秒刷新一次磁盘而不是每次写入,这有所帮助,但还不够。分析表明,有一些表是大多数负载(读取和写入操作)的罪魁祸首。查询已经编入索引&优化但未分区。平均MySQL状态为:发送数据@ 45%,统计数据@ 20%,更新@ 15%,排序结果@ 8%。

问题:

  1. 升级硬件可以获得多少性能?
  2. 同样的问题,但如果我对高负载表进行分区?
  3. 机器:

    • m2.2xlarge

      • 64位
      • 4 vCPU
      • 13 ECU
      • 34.2 Gb Mem
      • EBS-优化
      • 网络效果:“中等”
    • m2.4xlarge

      • 64位
      • 6 vCPU
      • 26 ECU
      • 68.4 Gb Mem
      • EBS-优化
      • 网络效果:“高”

1 个答案:

答案 0 :(得分:1)

根据我的经验,MySQL性能的最大提升来自IO。你有很多RAM。尝试设置一个ram驱动器并将tmpdir指向它。

我有几台非常繁忙的MySQL服务器。我的设置如下 - 也许这可以帮助您调整设置。

我的设置是: -Dual 2.66 CPU 8核心盒,带有6个驱动器的Raid-1E阵列--1.3TB。 -innodblogs在一个单独的SSD驱动器上。 -tmpdir位于2GB的tempfs分区上。 -32GB的ram

InnoDB设置:

innodb_thread_concurrency=16
innodb_buffer_pool_size = 22G
innodb_additional_mem_pool_size = 20M
innodb_log_file_size = 400M
innodb_log_files_in_group=8
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2 (This is a slave machine - 1 is not required fo my purposes) 
innodb_flush_method=O_DIRECT

每秒当前查询平均值:5185.650

我正在使用Percona Server,这比我测试的其他MySQL要快得多。