前言
今天在新增Mysql数据库表新字段的时候,发现只要执行sql就会出现锁表的情况。
记录一下具体的排查流程和处理方案
问题定位和处理
查看了mysql的进程
show processlist;
发现一直在等待锁 Waiting for table metadata lock。

Waiting for table metadata lock
在查询结果中发现,除了这个也其他异常的情况。
初步排除有可能是以下情况导致的:
长事务运行
处理:kill掉 或 等待事务执行完成
未提交事物
处理流程:
1.查询正在执行的事务
select * from information_schema.innodb_trx
获取到线程ID: trx_mysql_thread_id

2.定位找到出现问题的SQL
select * from performance_schema.events_statements_current
获取到对应 THREAD_ID 的语句,从而可以知道哪个SQL执行有问题

3.使用 kill ${trx_mysql_thread_id} 杀掉进程让其回滚。
4.针对sql进行优化或者业务优化