MySQL非常简单的SELECT查询非常慢

我们有一个简单的Web应用程序运行在一个虚拟机上,它将数据保存在MySQL 5.5数据库和InnoDB引擎中。 一切正常,大约三年,但突然变得非常缓慢。

例如,我有一个非常简单的表格控股地址:

CREATE TABLE `addresses` ( `address_id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(64) CHARACTER SET latin1 NOT NULL, `firstname` varchar(64) CHARACTER SET latin1 NOT NULL, `street` varchar(64) CHARACTER SET latin1 NOT NULL, `housenumber` varchar(16) CHARACTER SET latin1 NOT NULL, `zip` varchar(5) CHARACTER SET latin1 NOT NULL, `city` varchar(64) CHARACTER SET latin1 NOT NULL, `email` varchar(64) CHARACTER SET latin1 NOT NULL, `phone` varchar(16) CHARACTER SET latin1 NOT NULL, `birthdate` date NOT NULL, PRIMARY KEY (`address_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin 

这张桌子里有大约800个参赛作品。 但运行查询

 SELECT * FROM addresses 

出于testing目的,它似乎永远不会完成。 我用服务器本身的mysql CLI检查了这个:它输出表的一些行,然后等待很长时间,直到它输出下一行。

所以也许这是数据发送阶段的问题,但我不确定。

虚拟机有2GB的RAM,只有320MB被使用。 CPU也运行在非常低的1到2%。 mytop不显示阻塞服务器的任何其他查询。 ITpipe​​理员表示,他们在硬件方面没有任何改变。

我已经尝试了一些重新启动数据库服务器,重新启动虚拟机。 没有帮助。

编辑:

 EXPLAIN SELECT * FROM addresses 

给我这个结果:

 +----+-------------+-----------+------+---------------+------+---------+------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+------+---------------+------+---------+------+------+-------+ | 1 | SIMPLE | addresses | ALL | NULL | NULL | NULL | NULL | 793 | | +----+-------------+-----------+------+---------------+------+---------+------+------+-------+ 1 row in set (0.00 sec) 

如果CPU负载很低,那么这表明没有索引丢失的问题,如果是这样,查询只需要更多的CPU和磁盘访问。 你也说过它3年来工作得很好。

你检查了一般的磁盘访问速度(特别是在数据库所在的分区上)吗? 例如像这样使用dd 。 你所描述的听起来像是死盘或半死的突袭。 备份我希望?

你可以尝试一些事情,

  1. 你有索引设置?

索引可以快速查找logging,而无需首先执行全表扫描,大幅缩短执行时间。

 CREATE INDEX idx_name ON addresses(name); 
  1. 在运行查询之前,首先使用EXPLAIN关键字,

当在SELECT查询前面使用时,它将描述MySQL如何执行查询以及在完成之前需要处理的行数。

  1. 对你的mysql.ini进行一些修改,如果它的虚拟机增加了内存,并configuration你的mysql.ini来查看性能是否提高。

有很多MySQL优化器可以指导你。

帮助这个帮助