我似乎在使用MySQL的特定数据库上的所有表上进行缓慢插入,更新和删除。这些表中的数据不是很多(从2k到20k)。少量列(5-10),索引(其中两个),没有重复的索引问题。我正在使用MyISAM运行MySQL 5.0.45。
我运行以下查询,大约需要5-7秒:
UPDATE accounts SET updated_at = '2010-10-09 11:22:53' WHERE id = 8;
选择似乎马上回来了。
解释给我以下内容:
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | accounts | index | NULL | PRIMARY | 4 | NULL | 1841 | Using index |
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+
除了看似大量的上下文切换之外,探查器不会显示任何重要数据:
+----------------------+----------+-------------------+---------------------+
| Status | Duration | Context_voluntary | Context_involuntary |
+----------------------+----------+-------------------+---------------------+
| (initialization) | 0.000057 | 0 | 0 |
| checking permissions | 0.000008 | 0 | 0 |
| Opening tables | 0.000013 | 0 | 0 |
| System lock | 0.000005 | 0 | 0 |
| Table lock | 0.000005 | 0 | 0 |
| init | 0.000061 | 0 | 0 |
| Updating | 0.000101 | 0 | 0 |
| end | 7.957233 | 7951 | 2 |
| query end | 0.000008 | 0 | 0 |
| freeing items | 0.000011 | 0 | 0 |
| closing tables | 0.000007 | 1 | 0 |
| logging slow query | 0.000002 | 0 | 0 |
+----------------------+----------+-------------------+---------------------+
这也可能有所帮助:
+----------------------+----------+-----------------------+---------------+-------------+
| Status | Duration | Source_function | Source_file | Source_line |
+----------------------+----------+-----------------------+---------------+-------------+
| (initialization) | 0.000057 | check_access | sql_parse.cc | 5306 |
| checking permissions | 0.000008 | open_tables | sql_base.cc | 2629 |
| Opening tables | 0.000013 | mysql_lock_tables | lock.cc | 153 |
| System lock | 0.000005 | mysql_lock_tables | lock.cc | 162 |
| Table lock | 0.000005 | mysql_update | sql_update.cc | 167 |
| init | 0.000061 | mysql_update | sql_update.cc | 429 |
| Updating | 0.000101 | mysql_update | sql_update.cc | 560 |
| end | 7.957233 | mysql_execute_command | sql_parse.cc | 5122 |
| query end | 0.000008 | mysql_parse | sql_parse.cc | 6116 |
| freeing items | 0.000011 | dispatch_command | sql_parse.cc | 2146 |
| closing tables | 0.000007 | log_slow_statement | sql_parse.cc | 2204 |
| logging slow query | 0.000002 | dispatch_command | sql_parse.cc | 2169 |
+----------------------+----------+-----------------------+---------------+-------------+
其他信息: 它运行在CentOS-5 VPS上,保证了4演出的内存。在updated_at列上没有索引,也没有在任何地方触发。
[我试过的新事物]
任何想法接下来要看什么或可能是什么问题?似乎更像是一个最近的问题,虽然我不能说它何时开始准确出现。
答案 0 :(得分:1)
如果您有可变长度的行,则可能需要偶尔运行 OPTIMIZE TABLE 。
答案 1 :(得分:1)
我运行了一个ALTER TABLE来将引擎设置为MyISAM(它已经是)并重新创建了这些文件。更新/插入/删除再次快速运行!