解决 MySQL 性能问题

解决 MySQL 性能问题

环境:

1 台物理机

  • 8GB 内存
  • 一些较旧的 Core2Duo CPU
  • 1 个硬盘
  • Windows Vista 64 位

1 台虚拟机

  • 16 GB 内存
  • 2 个 vCPU
  • Windows 7 64位

两台机器都运行 MySQL 5.5.28 (64Bit),数据库相同。我管理 VMWare 环境,另一个用户管理数据库部分。物理机器应该用虚拟机替换,因此所有数据都已迁移。问题是:VM 上的性能太差了。DB-admin 直接在两台机器上运行一个大查询,物理机器比 VM 快 2-3 倍。所以我们对 VM 尝试了几件事:更多的 RAM、更多的 CPU,我还连接了一个具有 16kb 块大小的 RAW 设备,毫不费力。物理设备总是比 VM 性能更好。

我们的 VMWare 环境由 3 台主机组成:

  • 主机 - Dell PowerEdge R720、2x E5-2640、8x 8GB RAM、Broadcom BCM57711 10GB HBA
  • 交换 - Dell Powerconnect 8024F
  • 存储 - Dell Equallogic PS4100X iSCSI
  • VMWare 5.1,Clustred,HA,无分布式 vSwitch

我们发现了一些配置问题,我做了几件事来尝试提高性能:

  • 虚拟机内的防火墙已关闭
  • 病毒扫描已关闭
  • IPV6 已关闭

在主机上,我读到过关于 TCP 延迟确认和 LRO 的延迟问题,戴尔建议关闭这些功能,所以我关闭了它们,这稍微提高了虚拟机内的吞吐量(使用 IOMeter 进行了快速测试)。MySQL 数据库有点大(120GB 文件),如果我使用 Windows 资源管理器将其从虚拟机中的一个卷复制到另一个卷,我会得到恒定的 130mb/s(虚拟机驱动器 c: - Windows,驱动器 e: - 原始设备)。如果运行查询,我可以在 Windows 资源监视器中看到文件读取速度约为 500kb/s。这里可能是什么问题?

DBA 还告诉我,他在 my.ini 中尝试了不同的数据库设置,尝试将巨大的数据库文件拆分为较小的文件,但都无济于事(我个人不是 MySQL 专家,所以我不得不相信他)。

我知道 Windows 7 不是作为 DB 服务器运行的最佳操作系统,但这应该是一个为期几天的快速测试,稍后我们将使用 2008 R2。我将尝试使用 ioping 和/或 IOMeter 进行一些测试(对此有任何建议吗?)。提前致谢。

编辑

直接在 SAN 上监控原始设备:

执行数据库查询时: http://s1.directupload.net/file/d/3185/x5rpsmg5_png.htm

使用 Windows 资源管理器执行文件复制时: http://s14.directupload.net/file/d/3185/ug6zlpki_png.htm

执行上述操作时虚拟机的 CPU 负载: http://s14.directupload.net/file/d/3185/2qgmbx9q_png.htm

答案1

您的问题是存储后端。

从您的图表可以清楚地看出,您的 SAN 无法承受较高的随机 IOPS 值(请参见平均 iops 和平均队列深度)。

为了改善这种情况,请尝试以下方法:

  1. my.cnf通过编辑文件并添加(或更改)行来增加 innodb 缓冲池大小innodb_buffer_pool_size = 8589934592
  2. 如果可能的话,使用直接连接的磁盘(R720 服务器本地)而不是通过 SAN 运行测试

答案2

这似乎是 VMWare 存储堆栈导致的问题。即使您已将主机移至其自己的硬件上,请记住,在共享的 VMWare 存储上,使用相同数据存储的所有工作负载都使用相同的存储资源。VMWare 在将存储的原始性能传递给其虚拟机方面已经做得更好,但它并不像原始设备那样好。

用以下方法测试该理论:创建原始设备映射(可能是虚拟机的克隆)并重新运行测试。如果它更接近物理服务器的结果,则问题就出在这里。编辑:如果您无法使用 Windows 7 中的原始设备,则必须使用服务器操作系统进行尝试。如果这在您使用原始设备之前解决了问题,那么您将得到另一个答案 :P

在我的商店中,我们仍在 VMWare 4 上运行产品,因此我们必须对所有数据库使用 RDM。您可能不必走那么远,因为您使用的是更好的 VMWare 版本,但也许可以尝试为该数据库在不同的存储端口上专用一个具有自己的 lun 的数据存储区。

相关内容