解决MySQL性能问题

环境:

1台物理机器

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

1虚拟机

  • 16 GB RAM
  • 2个vCPU
  • Windows 7 64位

这两台机器运行MySQL 5.5.28(64Bit)与相同的数据库。 我正在pipe理VMWare环境,另一个用户正在pipe理数据库部分。 物理机器应该被虚拟机replace,所有的数据都被迁移了。 这里的问题是:在VM上的性能是可怕的。 DB-admin直接在两台机器上运行一个大的查询,而物理的查询比VM快2-3倍。 所以我们用VM做了几件事情:更多的内存,更多的CPU,我还附加了一个16kb块大小的RAW设备,没有任何努力。 物理总是胜过虚拟机。

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

  • 主机 – 戴尔PowerEdge R720,2x E5-2640,8x8GB内存,Broadcom BCM57711 10GB HBA
  • 切换 – Dell Powerconnect 8024F
  • 存储 – Dell Equallogic PS4100X iSCSI
  • VMWare 5.1,Clustred,HA,没有分布式vSwitch

我们发现一些configuration问题,我做了几件事情来提高性能:

  • 虚拟机内的防火墙已closures
  • 病毒扫描已closures
  • IPV6closures

在主机上,我有一个延迟问题,我在戴尔上读到关于TCP延迟确认和LRO的问题 – build议closures这些延迟,所以我做了一些提升虚拟机内的吞吐量(使用IOMeter做了一个快速testing)。 MySQL数据库是一种沉重的(120GB的文件),如果我复制它在VM内从一个卷到另一个与Windows资源pipe理器我得到恒定的130mb /秒(VM驱动器C: – Windows驱动器E: – 原始设备)。 如果查询运行,我可以在Windows资源监视器中看到该文件以〜500kb / s的速度读取。 这里可能是什么问题?

DBA也告诉我,他在my.ini中尝试了不同的数据库设置,试图将较大的db文件拆分成小数据库,所有这些都毫不费力(个人而言,我不是MySQL专家,所以我必须相信他)。

我知道Windows 7并不是运行数据库服务器的最佳操作系统,但这应该是一个快速的testing,稍后我们将使用2008 R2。 我会尝试用Ioping和/或IOMeter做一些testing(对此的任何推荐?)。 提前致谢。

编辑

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

如何做数据库查询: http ://s1.directupload.net/file/d/3185/x5rpsmg5_png.htm

使用Windows资源pipe理器执行Filecopy时: http ://s14.directupload.net/file/d/3185/ug6zlpki_png.htm

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

你的问题是存储后端。

从您的图表中可以清楚地看到,您的SAN不具备高随机IOPS值的能力(同时查看iop和aver。队列深度)。

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

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

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

以这种方式testing这个理论:创build一个裸设备映射到(也许是一个克隆)您的虚拟机,并重新运行testing。 如果它更接近物理服务器的结果,那就是你的问题。 编辑:如果你不能使用从Windows 7的原始设备,你必须尝试使用​​服务器操作系统。 如果这样可以解决这个问题,那么你会得到另一个答案:P

在我的店里,我们仍然在VMWare 4上运行,所以我们必须使用RDM来处理所有的数据库。 你可能不需要做更好的VMWare版本,但也许可以尝试在这个数据库的不同存储端口上使用自己的LUN。