1

我需要提高数据库的 I/O 性能。我正在使用下面描述的“2xlarge”硬件并考虑升级到“4xlarge”硬件(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. 同样的问题,但是如果我对高负载表进行分区?

机器:

  • m2.2xlarge

    • 64 位
    • 4 个虚拟 CPU
    • 13 电子控制单元
    • 34.2 Gb 内存
    • EBS 优化
    • 网络性能:“中等”
  • m2.4xlarge

    • 64 位
    • 6 个虚拟 CPU
    • 26个ECU
    • 68.4 Gb 内存
    • EBS 优化
    • 网络性能:“高”
4

1 回答 1

1

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

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

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

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 快得多。

于 2013-10-09T20:08:46.327 回答