2012-04-07 75 views
2

以下查詢花費很長的時間,但它應該立即執行:簡單的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

回答

0

如果這是一個MyISAM表,您可能需要修復它。我有這種現象與損壞的數據文件。

+0

是的,它是MyISAM。我多次嘗試維修,優化和沖洗。只有FLUSH解決了這個問題,但即使是暫時的。第二天,問題又回來了。 我還應該提到,這是在一個主服務器和一個從服務器的集羣上,不確定它是否與問題有任何關聯。 – Striker 2012-04-07 20:20:28

1

已解決 - 導致mysql緩存大小過大。降低它的大小解決了問題。

+0

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