mysql 数据库锁通常处理

MySQL在进行alter table等DDL操做时,有时会出现Waiting for table metadata lock的等待场景。并且,一旦alter table TableA的操做停滞在Waiting for table metadata lock的状态,后续对TableA的任何操做(包括读)都没法进行,由于他们也会在Opening tables的阶段进入到Waiting for table metadata lock的锁等待队列。若是是产品环境的核心表出现了这样的锁等待队列,就会形成灾难性的后果。数据库

 

show processlist; -- 查看数据库锁状况spa

kill id; -- kill 杀掉当前锁住的进程orm

select * from information_schema.innodb_trx -- 找到未提交事物的sid, 而后 kill 掉,让其回滚队列

select * from performance_schema.events_statements_current -- 查到执行失败的语句进程

 

 

 

 

 

alter table的语句是很危险的(其实他的危险实际上是未提交事物或者长事务致使的),在操做以前最好确认对要操做的表没有任何进行中的操做、没有未提交事务、也没有显式事务中的报错语句。若是有alter table的维护任务,在无人监管的时候运行,最好经过lock_wait_timeout设置好超时时间,避免长时间的metedata锁等待。事务

相关文章
相关标签/搜索