首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓慢的MySQL更新/插入/删除

缓慢的MySQL更新/插入/删除
EN

Stack Overflow用户
提问于 2010-12-01 02:37:02
回答 2查看 1.7K关注 0票数 2

我似乎正在用MySQL对特定数据库中的所有表进行缓慢的插入、更新和删除。这些表中的数据不多(从2k到20k)。少数列(5-10列),索引(其中两个),并且没有重复的索引问题。我正在使用MySQL运行MyISAM 5.0.45。

我运行以下查询,大约需要5-7秒:

代码语言:javascript
复制
UPDATE accounts SET updated_at = '2010-10-09 11:22:53' WHERE id = 8;

选择似乎马上回来。

解释给我以下内容:

代码语言:javascript
复制
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table    | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+
|  1 | SIMPLE      | accounts | index | NULL          | PRIMARY | 4       | NULL | 1841 | Using index | 
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+

分析器不显示任何其他重要数据,只显示看似数量较多的上下文开关:

代码语言:javascript
复制
+----------------------+----------+-------------------+---------------------+
| 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 | 
+----------------------+----------+-------------------+---------------------+

这也可能有助于:

代码语言:javascript
复制
+----------------------+----------+-----------------------+---------------+-------------+
| 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列上没有索引,也没有在任何地方触发。

我尝试过的新事物

  1. 创建了一个运行innodb的新表(使用like),并从一个受影响的表中插入了所有记录。(同样的问题)
  2. 备份了数据库,并将其还原到同一服务器实例中的不同数据库。(相同的problem)
  3. Restored,对我本地机器的同一个备份,我没有问题。在同一个具有问题数据库的mysql服务器实例中,fine.
  4. Restarted
  5. 尝试了另一个数据库,而另一个数据库( Wordpress DB)只运行了更新/插入/删除(

mysqld ),并于昨晚重新启动了整个服务器(相同的problem)

  1. Deleted MySQL到版本5.0.77 (相同的problem)
  2. Deleted-来自受影响的表(相同问题)的所有索引)

有什么想法,看看下一步是什么,或可能是什么问题?似乎是最近的一个问题,虽然我不能确切地说它是什么时候开始出现的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-02 07:31:24

终于找到了答案。那个数据库在某种程度上丢失了MYD和MYI文件,而且还在运行。考虑到MYD文件保存MyISAM表的数据,不确定这是怎么可能的,但这导致了缓慢的插入/更新/删除。

我运行了一个ALTER来将引擎设置为MyISAM (它已经是了),并重新创建了这些文件。更新/插入/删除再次快速运行!

票数 1
EN

Stack Overflow用户

发布于 2010-12-01 02:48:02

如果有可变长度的行,则可能需要偶尔运行优化表

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4320719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档