最近遇到一个现网问题,一个带自增ID的表总是在凌晨3点到4点左右间歇性的出现insert失败
表t的结构如下:
t(id int auto_increment,c1 int,c2,int,c3 int,primary key (id))
是很简单的insert形式:
insert into table t(c1,c2,c3) values(v1,v2,v3)
发现应用程序写入失败的日志报错为:lock wait timeout exceeded,try to restart transaction
由于除了主键之外,该表没有其他任何唯一索引,上面的插入失败说明,该表是全表被锁,不然不可能出现简单的插入失败,或者是自增锁被锁定,导致无法分配下一个有效的自增id值
由于很多DB都有这种情况,而且都是间歇性的出现,现在想把导致这些锁等待超时的SQL捕获下来,看看到底是什么原因导致这种情况,请问有什么好的方法可以捕获到导致锁等待超时的语句?
3点会有全备,但是确定不会锁定任何表,因为使用的是--skip-lock--tables选项
自增锁模式设置为:
innodb_autoinc_lock_mode=1
|