环境:
1台物理机器
1虚拟机
这两台机器运行MySQL 5.5.28(64Bit)与相同的数据库。 我正在pipe理VMWare环境,另一个用户正在pipe理数据库部分。 物理机器应该被虚拟机replace,所有的数据都被迁移了。 这里的问题是:在VM上的性能是可怕的。 DB-admin直接在两台机器上运行一个大的查询,而物理的查询比VM快2-3倍。 所以我们用VM做了几件事情:更多的内存,更多的CPU,我还附加了一个16kb块大小的RAW设备,没有任何努力。 物理总是胜过虚拟机。
我们的VMWare环境由3台主机组成:
我们发现一些configuration问题,我做了几件事情来提高性能:
在主机上,我有一个延迟问题,我在戴尔上读到关于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。队列深度)。
要改善这种情况,请尝试以下方法:
my.cnf文件并添加(或更改)该行innodb_buffer_pool_size = 8589934592 这看起来像是VMWare存储堆栈引起的问题。 即使您已将主机移动到自己的硬件上,请记住,在共享的VMWare存储上,使用相同数据存储的所有工作负载使用相同的存储资源。 VMWare在将存储的原始性能传递给它的虚拟机方面已经做得更好了,但是它并不像原始设备那么好。
以这种方式testing这个理论:创build一个裸设备映射到(也许是一个克隆)您的虚拟机,并重新运行testing。 如果它更接近物理服务器的结果,那就是你的问题。 编辑:如果你不能使用从Windows 7的原始设备,你必须尝试使用服务器操作系统。 如果这样可以解决这个问题,那么你会得到另一个答案:P
在我的店里,我们仍然在VMWare 4上运行,所以我们必须使用RDM来处理所有的数据库。 你可能不需要做更好的VMWare版本,但也许可以尝试在这个数据库的不同存储端口上使用自己的LUN。