我似乎正在用MySQL对特定数据库中的所有表进行缓慢的插入、更新和删除。这些表中的数据不多(从2k到20k)。少数列(5-10列),索引(其中两个),并且没有重复的索引问题。我正在使用MySQL运行MyISAM 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-5VPS上,有4G的ram保证。在updated_at列上没有索引,也没有在任何地方触发。
我尝试过的新事物
mysqld ),并于昨晚重新启动了整个服务器(相同的problem)
有什么想法,看看下一步是什么,或可能是什么问题?似乎是最近的一个问题,虽然我不能确切地说它是什么时候开始出现的。
发布于 2010-12-02 07:31:24
终于找到了答案。那个数据库在某种程度上丢失了MYD和MYI文件,而且还在运行。考虑到MYD文件保存MyISAM表的数据,不确定这是怎么可能的,但这导致了缓慢的插入/更新/删除。
我运行了一个ALTER来将引擎设置为MyISAM (它已经是了),并重新创建了这些文件。更新/插入/删除再次快速运行!
发布于 2010-12-01 02:48:02
如果有可变长度的行,则可能需要偶尔运行优化表。
https://stackoverflow.com/questions/4320719
复制相似问题