硬件升级并迁移到VM后,MySQL性能问题

最近我们在服务器上运行了一些(安全)更新,并重新启动了机器。 由于GPU(集成在CPU中)的问题,我们的开发服务器不再上网了。 我们已经replace(并升级)了该机器上的硬件,并将原来的裸机转换为虚拟机(KVM),以便日后从CentOS5 – > CentOS6升级。

但是机器本身并没有被重新安装,所有的数据都被保护起来,并被复制1:1作为(新)VM可以用来启动的新镜像。

我们现在的问题是MySQL的性能。 它似乎主要与真正简单的CREATE TABLE语句有关。 我们无法find这个问题是与MySQL升级到5.5.50还是迁移到虚拟机有关。

问题:

MySQL的慢,querylog

# Time: 160610 13:55:50 # User@Host: unittest[unittest] @ localhost [127.0.0.1] # Query_time: 7.954247  Lock_time: 0.000049 Rows_sent: 0  Rows_examined: 0 use unittest_api_575aaabd9e502; SET timestamp=1465559750; -- -------------------------------------------------------- -- -- Table structure for table `customer` -- CREATE TABLE IF NOT EXISTS `customer` (   `customer_id` int(11) unsigned NOT NULL AUTO_INCREMENT,   `name` varchar(255) NOT NULL,   `crm_id` varchar(255) DEFAULT NULL,   PRIMARY KEY (`customer_id`) ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=25 ; 

(我们的unit testing套件创build一个数据库结构,这是一个创build的表)

你会注意到创build这张表需要花费将近8秒的时间! (我们的testing套件现在需要2分钟而不是30秒)

我也用分析来运行这个查询:

 DROP TABLE IF EXISTS `customer`; set profiling =1; CREATE TABLE IF NOT EXISTS `customer` ( `customer_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `crm_id` varchar(255) DEFAULT NULL, PRIMARY KEY (`customer_id`) ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=25; set profiling =0; show profile all for query 1; 

这是输出: slow_query 结果会有所不同,但是我确实看到很多高(> 1秒)的值),对我来说,在负载很小的服务器上,这绝对不会超过一秒。

我试图对my.conf进行一些更改,但是我还没有设法提高性能。 我已经上传我们的my.cnf作为参考。

服务器上的一些细节:

  • MySQL 5.5.50
  • CentOS 5.11

主办:

  • i7 6300
  • 32GB内存
  • 2个1TB硬盘

VM:

  • 4个核心
  • 16GB RAM

我不能相信这只是从裸机=>虚拟机。 任何人都可以把我们指向正确的方向吗? 如果需要更多信息,请告诉我。

附加信息:

  • 虚拟机configuration:
  • CPU负载:低(〜5%)
  • 执行期间输出iostat: http : //pastebin.com/AHkby04X

您没有指定虚拟磁盘高速cachingtypes,因此libvirt正在采用最安全的高速cachingscheme: directsync ,这意味着所有写入都立即同步到物理磁盘。

这种限制性的cachingtypes对于现代的caching感知应用程序来说通常是过度的,它们自己使用写入屏障来确保重要的写入被同步到磁盘。

请执行下列操作:

  • closures你的机器
  • 通过virt-manager打开configuration
  • selectvirtio disk 1 ,然后在右侧窗格中单击advanced ,然后performance options
  • 将cachingtypes设置为writeback
  • 最后,重新启动您的虚拟机。

虚拟机现在应该快得多。 但是,由于您使用的是较旧的操作系统(CentOS 5.x),请确保在来宾操作系统中启用写入屏障。 要做到这一点,你应该挂载你的客户的文件系统的barrier=1挂载选项(例如:通过/etc/fstab传递它)。

有关caching和屏障的其他信息,请参阅此处