简单的MySQL更新查询速度很慢

简单的MySQL更新查询速度很慢

问题描述:

以下查询花费很长的时间,但它应该立即执行:简单的MySQL更新查询速度很慢

mysql> UPDATE articles SET description='test' WHERE article_id=6; 
Query OK, 1 row affected (40.80 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 
  • article_id的数据类型为int自动增量
  • 表只拥有约1000个记录

我试着分析这个查询,你可以看到它执行更新很快但是因为某种原因挂起:

mysql> SHOW PROFILE FOR QUERY 1; 
+----------------------+-----------+ 
| Status    | Duration | 
+----------------------+-----------+ 
| starting    | 0.000079 | 
| checking permissions | 0.000016 | 
| Opening tables  | 0.000020 | 
| System lock   | 0.000011 | 
| Table lock   | 0.000864 | 
| init     | 0.000078 | 
| Updating    | 0.000315 | 
| end     | 40.798736 | 
| query end   | 0.000028 | 
| freeing items  | 0.000014 | 
| closing tables  | 0.000012 | 
| logging slow query | 0.000010 | 
| logging slow query | 0.000046 | 
| cleaning up   | 0.000012 | 
+----------------------+-----------+ 
14 rows in set (0.00 sec) 

我试着将tmp目录挂载到RAM,以加快查询速度,但这也没有帮助。

我发现如果我刷新表格,问题就会暂时消失,但它会在一段时间后再次出现。

任何帮助表示赞赏。

+0

是否有其他的东西在同一时间对数据库运行?您可能会遇到锁定问题,其中一些其他查询已锁定相关行。 – 2012-04-07 18:51:44

如果这是一个MyISAM表,您可能需要修复它。我有这种现象与损坏的数据文件。

+0

是的,它是MyISAM。我多次尝试维修,优化和冲洗。只有FLUSH解决了这个问题,但即使是暂时的。第二天,问题又回来了。 我还应该提到,这是在一个主服务器和一个从服务器的集群上,不确定它是否与问题有任何关联。 – Striker 2012-04-07 20:20:28

已解决 - 导致mysql缓存大小过大。降低它的大小解决了问题。

+0

什么是缓存的好大小? – alimack 2017-04-03 10:19:42