`
jtjs1989
  • 浏览: 13798 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mysql一次Waiting for table metadata lock问题解决

阅读更多
最近在测试环境的mysql执行一个alter table 语句时一直处于阻塞状态,通过 show processlist 查看线程一直处于Waiting for table metadata lock,排查了所有线程没发现有其他线程获取到锁,一直疑惑到底是什么线程持有了锁没释放,

在网上查询得知MySQL在进行一些alter table等DDL操作时,如果该表上有未提交的事务则会出现 Waiting for table metadata lock ,而一旦出现metadata lock,该表上的后续操作都会被阻塞(详见 http://www.bubuko.com/infodetail-1151112.html)。所以这个问题需从两方面解决:

1. 查看未提交事务

从 information_schema.innodb_trx 表中查看当前未提交的事务

select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trx

字段意义:

trx_state: 事务状态,一般为RUNNING
trx_started: 事务执行的起始时间,若时间较长,则要分析该事务是否合理
trx_mysql_thread_id: MySQL的线程ID,用于kill
trx_query: 事务中的sql
一般只要kill掉这些线程,DDL操作就不会Waiting for table metadata lock

到此,问题解决。
分享到:
评论

相关推荐

    MySQL出现Waiting for table metadata lock的原因方法

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)...

    mysql锁表解表

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在Waiting for table metadata lock的状态,后续对TableA的任何操作(包括读)...

    MySQL表结构变更你不可不知的Metadata Lock详解

    想必玩过mysql的人对Waiting for table metadata lock肯定不会陌生,一般都是进行alter操作时被堵住了,导致了我们在show processlist 时,看到线程的状态是在等metadata lock。本文会对MySQL表结构变更的Metadata ...

    19.为什么我只查一行的语句也执行这么慢?1

    #### 状态:Waiting for table metadata lock 当查询长时间不返回时,可能是由于表级元数据锁(Metadata Lock, MDL)导致的。MDL锁用于保护表结构的安全,确保在结构变更期间数据的一致性。当一个线程试图获取MDL锁...

    Mysql解决USE DB堵塞详解

    MySQL中的“USE DB堵塞”问题通常涉及到元数据锁定(Metadata Lock, MDL)机制,这是一种在MySQL中用于保护数据库对象(如表)不被并发操作破坏的机制。当多个线程试图修改或读取同一数据库对象时,MDL锁会确保操作...

    详细分析mysql MDL元数据锁

    当你看到 waiting for table metadata lock 时,那就是遇到MDL元数据锁了。本篇文章将会介绍MDL锁的产生与排查过程。 1.什么是MDL锁 MDL全称为metadata lock,即元数据锁。MDL锁主要作用是维护表元数据的数据一致性...

    mysql-常见问题,索引优化

    `STATE`列显示了每个线程当前的活动状态,如`Waiting for table metadata lock`、`Sending data`等,有助于诊断阻塞和性能问题。 17. 松散索引和紧凑索引 松散索引(也称为非聚簇索引)不包含主键数据,只存储索引...

    mysql45讲 19.为什么我只查一行的语句,也执行这么慢?1

    使用 show processlist 命令查看 Waiting for table metadata lock 的示意图。 这个状态表示的是,现在有一个线程正在表 t 上请求或者持有 MDL 写锁,把 select 语句堵住了。在第 6 篇文章《全局锁和表锁:给表加个...

    mysql show processlist 显示mysql查询进程

    7. **State**:这是线程执行SQL语句的具体阶段,例如Waiting for table metadata lock(等待表元数据锁)、Sending data(发送数据)或Locked(锁定)。这些状态可以帮助分析查询的执行流程。 8. **Info**:展示...

    19.为什么我只查一行的语句,也执行这么慢?1

    这种情况通常表现为在`SHOW PROCESSLIST`命令中看到查询状态为“Waiting for table metadata lock”。这表明另一个线程正在请求或持有表的MDL(Metadata Lock)写锁,从而阻止了读取操作,如简单的`SELECT`语句。在...

    MySQL运维-故障处理手册

    1. **Waiting for table metadata lock:** - **含义:**表明当前线程正在等待获取表的元数据锁。 - **解决方法:** - 检查是否有其他线程正在对同一张表进行结构修改(如ALTER TABLE)。 - 尽量减少对表结构的...

    MySQL如何查看元数据锁阻塞在哪里

    如果某个会话处于等待状态(Waiting for table metadata lock),这表明它正在等待另一个会话释放元数据锁。 2. 通过`information_schema.innodb_trx`表:这个内部表包含了所有活跃的InnoDB事务信息。通过查询此表...

    解决sql挂起的代码帮助文档

    SHOW FULL PROCESSLIST WHERE State = 'Waiting for table metadata lock'; -- 强制结束指定ID的进程 KILL [process_id]; ``` 请注意,以上操作应谨慎执行,尤其是KILL命令,因为它可能会导致未保存的数据丢失或...

    processlist命令 查看mysql 线程

    - `State`列中的各种状态可以帮助识别潜在的问题,比如长时间的`Waiting for table metadata lock`可能表明有锁定问题,`Copying to tmp table on disk`可能表示内存不足,导致数据需写入磁盘临时表。 5. **优化和...

    通过mysql show processlist 命令检查mysql锁的方法

    7. **State**:线程执行SQL语句的具体状态,如Waiting for table metadata lock(等待表元数据锁)或Sending data(发送数据)等,这些状态提供了关于查询执行进度的线索。 8. **Info**:显示正在执行的SQL语句,但...

Global site tag (gtag.js) - Google Analytics