我在我的服务器上看到间歇性负载峰值,这与 MySQL 的慢查询日志中的一堆条目相对应:
# Time: 140326 21:00:40
# User@Host: admin[admin] @ localhost []
# Query_time: 14.713922 Lock_time: 0.000035 Rows_sent: 0 Rows_examined: 0
SET timestamp=1395867640;
INSERT INTO `jos_session` ( `session_id`,`time`,`username`,`gid`,`guest`,`client_id` ) VALUES ( 'sb39o10gdjhtacbkajeal0tp54','1395867625','','0','1','0' );
现在,对我来说,这样一个简单的查询可能需要这么长时间,这似乎很疯狂。所以,我认为这是由于短时间内请求太多,或者其他一些请求锁定了表,或者类似的事情。所以,我的问题是...... MySQL 是否可以将表锁定为插入?我应该寻找什么样的东西来找到这些慢查询的原因?我想这不仅仅是这个小表实际上需要很长时间来执行插入。特别是当我在没有发生高负载的情况下进行类似的插入时,根本不需要时间。
如果有帮助:
+--------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+--------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| ijkt_session | InnoDB | 10 | Compact | 52 | 315 | 16384 | 0 | 49152 | 4194304 | NULL | 2014-03-31 13:22:22 | NULL | NULL | utf8_general_ci | NULL | | |
+--------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
我想真正的问题是,InnoDB 表会发生什么可能导致单行的简单插入需要很长时间?即使这张桌子很大,它一点也不,它很小......我在想象某种巨大的失控索引,它正在跟踪曾经存在的每条记录,或者类似的东西......?还是我认为单个插入不可能花费很长时间?