【MySQL】DDL因Waiting for table metadata lock卡住
在数据库空闲时间,对表做碎片整理:
alter table my_abc engine=innodb;
发现会话被阻塞,显示状态是:
Waiting for table metadata lock
手动断开alter操作后,通过show processlist查看:
> show processlist;
+--------+--------+---------------------+-----------+---------+-------+----------+------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+--------+--------+---------------------+-----------+---------+-------+----------+------------------+----------+
| 489669 | pig | 119.119.3.221:60226 | pig | Sleep | 4 | | NULL | 0.000 |
| 489673 | xxx | 119.119.3.172:41394 | abced_xxx | Sleep | 120 | | NULL | 0.000 |
| 498227 | xxx | 119.119.3.172:48916 | abced_xxx | Sleep | 28303 | | NULL | 0.000 |
| 502773 | pig | 119.119.3.172:47752 | pig | Sleep | 26139 | | NULL | 0.000 |
| 519545 | root | localhost | NULL | Sleep | 15994 | | NULL | 0.000 |
+--------+--------+---------------------+-----------+---------+-------+----------+------------------+----------+
可以看到会话都处于sleep状态。但是一旦执行alter操作,就会卡在那里,等待元数据锁。
出现Waiting for table metadata lock这种情况多半是和事务有关,要么是一个长事务在运行,要么是事务没有提交造成的
先查看下是否开启了自动提交:
> show global variables like '%autocommit%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| autocommit | ON |
| wsrep_retry_autocommit | 1 |
+------------------------+-------+
2 rows in set (0.001 sec)
接下来,在查看一下是否有事务正在运行:
> select * from information_schema.innodb_trx \G;
*************************** 1. row ***************************
trx_id: 0
trx_state: RUNNING
trx_started: 2022-08-29 10:10:37
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 0
trx_mysql_thread_id: 498227
trx_query: NULL
trx_operation_state:
trx_tables_in_use: 0
trx_tables_locked: 0
trx_lock_structs: 0
trx_lock_memory_bytes: 1128
trx_rows_locked: 0
trx_rows_modified: 0
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_is_read_only: 0
trx_autocommit_non_locking: 0
1 row in set (0.001 sec) ERROR: No query specified
从这里看到,的确有一个事务在运行。从上班到下班还没结束。
这里就要找开发同学问问应用到底是在干什么了,解决了这个问题,顺便还解决了最近业务反应有些功能慢的问题。
此外,information_schema.innodb_trx中不会记录执行失败的事务,但是在这个执行失败的事务回滚前,它依然持有metadata lock,所以DDL操作依然会被阻塞。这个时候可以通过查找performance_schema.events_statements_current表来找到相关的语句和会话信息,将其杀死。为了减少metadata lock带来的危害,设置一个合理的lock_wait_timeout比较重要,这个值默认是365天,可以根据自身业务来设置,避免长时间的metadata lock等待。
总结一下:
·长时间运行的事务很危险,需要多关注。
·要关注autocommit是否开启
·使用事务需要小心,记得 commit,捕获异常 rollback
·做DDL操作前先检查一遍innodb_trx
·设置合理的lock_wait_timeout
【MySQL】DDL因Waiting for table metadata lock卡住的更多相关文章
- mysql错误: waiting for table metadata lock
今天突然发现truncate一个表都慢到不行,于是 SHOW PROCESSLIST 发现错误:waiting for table metadata lock解决方法:查看information_sc ...
- MySQL - 问题集 - "Waiting for table metadata lock"(待完善)
待完善.show processlist; 可参考1:http://blog.csdn.net/huochuangchuang/article/details/49423893 可参考2:http:/ ...
- MySQL出现Waiting for table metadata lock的原因以及解决方法
转自:http://ctripmysqldba.iteye.com/blog/1938150 (有修改) MySQL在进行alter table等DDL操作时,有时会出现Waiting for tab ...
- 【转】【MySql】Waiting for table metadata lock原因分析
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...
- mysql出现Waiting for table metadata lock的原因及解决方案
最近经常遇到mysql数据库死锁,郁闷死, show processlist; 时 Waiting for table metadata lock 能一直锁很久 下面有官网的一段话,可以理解下 htt ...
- 【MySQL经典案例分析】 Waiting for table metadata lock
本文由云+社区发表 一. 问题是这样来的 2018年某个周末,接到连续数据库的告警,告警信息如下: 二. 苦逼的探索过程 1.总体的思路 看到too many connection的报错信息,基本 ...
- MySQL出现Waiting for table metadata lock的场景浅析
MySQL版本为5.6.12. 在进行alter table操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的 ...
- 记一次MySQL中Waiting for table metadata lock问题的处理
起因:由于需要,要把一张表的一个字段从不是 null 改成 可null,我用的Navicat Premium ,但是在保存的时候,工具无响应了,几个同事操作都是这样的,很奇怪,怀疑是不是由于表被锁了还 ...
- MySQL Waiting for table metadata lock的解决方法
最近需要在某一个表中新增字段,使用Sequel Pro 或者Navicat工具都会出现程序没有反应,使用 show processlist 查看,满屏都是 Waiting for table meta ...
随机推荐
- LVS简单搭建(一)
先说一个坑: 192.168.65.110为虚拟ip,在主节点设置(ifconfig eth0:8 192.168.65.110/24),其他子节点要与主节点保持一致(ifconfig lo:3 ...
- Python调用腾讯云API,实现人脸年龄变化
网上看到了一个教程,调用腾讯云的人脸识别api和修改年龄api来实现模拟人物不同年龄的面貌 但是大多数教程的代码都是想同的,估计是抄袭哪个人的关键是执行不了 刚好周杰伦马上要发新专辑了,小改一下,拿杰 ...
- BUUCTF-爱因斯坦
爱因斯坦 16进制打开可以看到存在压缩包,使用binwalk分离出来 提示需要解压密码,按照常理爆破四位数纯数字没有出来,查看图片属性发现密码 得到flag
- FICO 常用事务码
1.SAP配置流程 1.定义,定义组织,概念,比如FI中定义公司代码,会计科目表,年度变式.SAP中有大量的定义过程. 2.分配,把会计科目表/公司/年度变式等参数分配到公司代码,逻辑组织,基本实现框 ...
- 安装pystaller
安装命令 # -i指定下载地址,此处采用清华大学镜像 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package pyin ...
- 【黑马pink老师的H5/CSS课程】(一)基本介绍
视频P4~P6 黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动 1.网页 1.1 什么是网页 网站是网页的集合,网页是构成网站的基本元素,常用html格式文件 1. ...
- 一文读懂数仓中的pg_stat
摘要:GaussDB(DWS)在SQL执行过程中,会记录表增删改查相关的运行时统计信息,并在事务提交或回滚后记录到共享的内存中.这些信息可以通过 "pg_stat_all_tables视图& ...
- Vmware虚拟机硬件兼容性
All virtual machines have a hardware version. The hardware version indicates which virtual hardware ...
- 泛型容器类和ArrayList操作
泛型 比如ArrayList<E> E就是泛型 在没有泛型之前,从集合读取到的每一个对象都必须进行转换,如果有人不小心插入了类型错误的对象,在运行时的转换处理就会出错 有了泛型之后,可以告 ...
- Css3入门详解
一.Css基本语法 1.Html和Css没分开时 点击查看代码 <!DOCTYPE html> <html lang="en"> <head> ...