2010.10.30
要下班了,开发人员过来跟我说,为什么他截断一个表,才163条记录。但是需要等待很长时间。
当时?想 应该是有等待事件,那就等着呗。于是我自己再Navicat 上操作他反应的那张表,结果出现下面的提示:

这明显是出现了锁,而且这种情况下是表锁。我就问开发,是不是有人在操作这张表,他说就他一个人操作,他也早就没操作了。
尼玛,这点印证了当初师傅的话,错误操作的人,永远都是会说:没有啊,我什么都没有做啊。
先查看一下进程里面有没有锁:
很明显出现了锁,也是他操作的那个库。
当然如果没有看到正在执行的慢SQL记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。
mysql> SELECT * FROM information_schema.INNODB_TRX\G;
---略
trx_mysql_thread_id: 86200
现在杀死进程:
mysql> kill 86200;
Query OK, 0 rows affected (0.00 sec)
接下来阶段表的时候就很快了。