經過我們服務的一些預期增長之後,突然間一些更新需要很長時間,這些過去非常快,直到表達到約2MM的記錄,現在它們需要大約40-每個60秒。MySQL更新時間過長
update table1 set field1=field1+1 where id=2229230;
Query OK, 0 rows affected (42.31 sec)
Rows matched: 1 Changed: 0 Warnings: 0
這裏是字段類型:從分析
`id` bigint(20) NOT NULL auto_increment,
`field1` int(11) default '0',
結果,上下文切換這似乎對結果高號碼只有一個:
mysql> show profile context switches
-> ;
+----------------------+-----------+-------------------+---------------------+
| Status | Duration | Context_voluntary | Context_involuntary |
+----------------------+-----------+-------------------+---------------------+
| (initialization) | 0.000007 | 0 | 0 |
| checking permissions | 0.000009 | 0 | 0 |
| Opening tables | 0.000045 | 0 | 0 |
| System lock | 0.000009 | 0 | 0 |
| Table lock | 0.000008 | 0 | 0 |
| init | 0.000056 | 0 | 0 |
| Updating | 46.063662 | 75487 | 14658 |
| end | 2.803943 | 5851 | 857 |
| query end | 0.000054 | 0 | 0 |
| freeing items | 0.000011 | 0 | 0 |
| closing tables | 0.000008 | 0 | 0 |
| logging slow query | 0.000265 | 2 | 1 |
+----------------------+-----------+-------------------+---------------------+
12 rows in set (0.00 sec)
該表大約有250萬條記錄,id是主鍵,並且在另一個字段上有一個唯一索引(未包含在更新中)。
這是一個innodb表。
任何可能的原因指針?
任何可以幫助追蹤問題的特定變量?
是否有解釋更新?
編輯:另外我剛纔注意到,該表還具有:
`modDate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
解釋:
+----+-------------+---------------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+-------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | table1 | const | PRIMARY | PRIMARY | 8 | const | 1 | |
+----+-------------+---------------+-------+---------------+---------+---------+-------+------+-------+
1 row in set (0.02 sec)
'field1'和'id'字段的類型是什麼? –
您可以嘗試分析此隊列。請參閱http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html –
看起來奇怪 - 1行匹配,但零行受到影響? –