MySQL waiting for table level lock

 

1、表使用了MyISAM引擎

2、是Innodb引擎引擎,但是mysqldump的运行会导致该问题 , 你能否确认当您做插入测试时, 是否有mysqldump正在运行?

3、innodb存储引擎只在以下三种情况会产生table level lock【1】【2】:
3.1、 innodb_table_locks = 1且 autocommit = 0时, LOCK TABLE语句会对整张表上锁, 根据您的回复, 后台并没有mysqldump运行, 同时您也没有使用LOCK TABLE语句加锁, 所以该猜测并不符合您的情景
3.2、 Intention Lock是一种table level的锁, 但Insert并不会使用Intention lock同时理论上Intention Lock并不会block其他query
3.3、 当有auto_increment的column时, 在进行insert操作时, innodb会使用Auto-INC Lock, 该锁也是table level的锁

从您的回复看, 您的表中应该是有auto_increment的column, 根据MySQL的官方文档【4】, 如果您将参数innodb_autoinc_lock_mode设置为2, 则在insert auto_increment的column时,innodb并不会使用auto_inc lock从而达到最快的insert操作。 但将该参数设置为2的弊端为如果您使用了statement-based的binlog format, 则当参数这是为2时可能会导致主从复制的不一致。

4、RDS数据库设置了slow_query_log=on,general_log=on,log_output=table也可能导致waiting for table level lock。关闭 slow_query_log 和 general_log 即可解决问题。

 

posted on 2015-04-05 23:31  duanxz  阅读(3540)  评论(0编辑  收藏  举报