【问题标题】:Improving MySQL I/O Performance (Hardware & Partitioning)提高 MySQL I/O 性能(硬件和分区)
【发布时间】:2013-10-15 10:33:21
【问题描述】:

我需要提高数据库的 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 个 vCPU
    • 13 ECU
    • 34.2 Gb 内存
    • EBS 优化
    • 网络性能:“中等”
  • m2.4xlarge

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

【问题讨论】:

  • 对于后代,配置会在关键的地方发生变化。我还为 EBS 卷在 AWS 预置 IOPS 上花费了额外的钱,这也是关键。后来我按日期划分了几个大表。

标签: mysql performance io amazon-ec2 hardware


【解决方案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 快很多。

【讨论】:

  • 太棒了,谢谢。我安装了 2GB Ram 磁盘并将临时表存储重定向到它。重新启动 mysql 后,看起来我没有使用 2GB :( 你碰巧知道我需要更改的任何其他配置变量吗?另外,介意告诉我你有什么吗?谢谢!显示全局变量喜欢'%table_size'; -- 显示 max_heap_table_size 和 tmp_table_size 均为 16MB
猜你喜欢
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
相关资源
最近更新 更多