MySQL更新/插入/删除速度慢
在使用MySQL的特定数据库中,我似乎对所有表的插入、更新和删除都很慢。这些表中的数据不多(从2k到20k)。少量的列(5-10),索引(其中两个),并且没有重复的索引问题。我正在用MyISAM运行MySQL 5.0.45 我运行以下查询,大约需要5-7秒:MySQL更新/插入/删除速度慢,mysql,performance,Mysql,Performance,在使用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; 他似乎马上就回来了 解释给了我以下信息: +----+-------------+---------
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千兆内存。在更新的_at列上没有索引,也不会在任何地方触发
[我尝试过的新事物]
你知道下一步该看什么,或者可能是什么问题吗?这似乎更像是最近出现的一个问题,尽管我不能确切地说它是什么时候开始出现的。如果您有可变长度的行,您可能需要偶尔运行优化表。最终找到了答案。该数据库不知何故丢失了MYD和MYI文件,并且仍在运行。考虑到MYD文件保存MyISAM表的数据,但这导致插入/更新/删除速度缓慢,因此不确定这是怎么可能的
我运行了一个ALTER表,将引擎设置为MyISAM(它已经是了),然后它重新创建了这些文件。更新/插入/删除再次快速运行 那把桌子锁上了。数据库中的活动较低,我有一个表,该表几乎没有显示此问题的操作(2k记录),所以我对其运行了优化表。不行。同样的问题,机器的生命体征如何?平均负荷?vmstat信息?低内存?大量的磁盘io?同一台mysql服务器上有很多其他数据库?尝试重新启动mysql?这个问题听起来很奇怪=(早些时候尝试重新启动MySQL。所有重要的统计数据看起来都很好;它正在休眠。我还将最新的备份还原到本地计算机上的数据库中。所有更新/插入/删除都很快。考虑到一切看起来都很好,此时很少有活动发生。在本地,上下文切换有区别:1与上下文中列出的7951相比。更新的列中是否有索引?这是在什么类型的机器上运行的?在资源有限的机器上(即:内存不多),MySQL将无法将主索引保留在内存中,每次都将强制从磁盘读取。更新的列上没有索引,并且它位于保证2 Gig的VPS上。另一个数据库(WordPress)在同一个mysql服务器实例上,似乎可以很好地处理更新/插入/删除。什么是数据库/表/列字符集和排序?是索引的
update\u部分吗?是update\u的数据类型吗?