记录一次polarDB出现Waiting for table metadata lock

news2024/9/19 14:07:46

在业务实践中,常见的 DDL 阻塞 原因是由于无法获取到 MDL 锁,即 Waiting for table metadata lock 。借助 metadata_lock 表,可以快速定位到 DDL 阻塞的原因。

元数据锁(MDL)
MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。主要是为了避免DML与DDL冲突,保证读写的正确性。

在MySQL5.5中引入了MDL,当对一张表进行增删改查的时候,加MDL读锁(共享),当对表结构进行变更操作的时候,加MDL写锁(排他)。

共享读与共享写都属于共享锁,他们两个互相兼容并于排他锁互斥。

查看数据库中元数据锁信息:

select object_type,object_schema,object_name,lock_type,lock_duration from performance_schema.metadata_locks ;

示例问题过程解析:

通过 show processlist 命令查询执行

alter table t1 add column d varchar(10),algorithm = inplace

后的状态。查询结果如下:

/*force_node='pi-bp10k7631d6k3****'*/ SHOW PROCESSLIST;
+-----------+-----------------+-----------------------+--------------------+----------------+---------+---------------------------------+-------------------------------------------------------------+
| Id        | User            | Host                  | db                 | Command        | Time    | State                           | Info                                                        |
+-----------+-----------------+-----------------------+--------------------+----------------+---------+---------------------------------+-------------------------------------------------------------+
|        98 | event_scheduler | localhost             | NULL               | Daemon         | 1306586 | Waiting on empty queue          | NULL                                                        |
|       109 | replicator      | 11.111.XX.XX:62549    | NULL               | Polar Log Dump |       1 | Reading log from innodb         | NULL                                                        |
|       113 | replicator      | 11.111.XX.XX:62560    | NULL               | Polar Log Ack  |       1 | Receiving from client           | NULL                                                        |
|       133 | replicator      | 10.13.64.70:42712     | NULL               | Polar Log Dump |       1 | Reading log from innodb         | NULL                                                        |
|       138 | replicator      | 10.13.64.70:42723     | NULL               | Polar Log Ack  |       0 | Receiving from client           | NULL                                                        |
|       369 | aurora          | 10.111.211.209:33334  | NULL               | Sleep          |       0 |                                 | NULL                                                        |
|       370 | aurora          | 10.111.211.209:33336  | NULL               | RDS Push LSN   | 1306413 | starting                        | NULL                                                        |
|       372 | aurora          | 10.111.204.224:37010  | NULL               | Sleep          |       0 |                                 | NULL                                                        |
|       373 | aurora          | 10.111.204.224:37019  | NULL               | RDS Push LSN   | 1306413 | starting                        | NULL                                                        |
|   3064011 | root            | 127.0.0.1:59703       | NULL               | Sleep          |     716 |                                 | NULL                                                        |
|   3064013 | root            | 127.0.0.1:59710       | NULL               | Sleep          |      25 |                                 | NULL                                                        |
|   3064015 | root            | 127.0.0.1:59713       | NULL               | Sleep          |      55 |                                 | NULL                                                        |
|   3064018 | root            | 127.0.0.1:59716       | NULL               | Sleep          |       1 |                                 | NULL                                                        |
|   3067041 | zyg_root        | 172.17.XX.XX:48594    | test               | Query          |      22 | Waiting for table metadata lock | alter table t1 add column d varchar(10),algorithm = inplace |
|   3067443 | zyg_root        | 172.17.XX.XX:48602    | test               | Sleep          |      27 |                                 | NULL                                                        |
|   3069716 | aurora          | 100.104.XX.XX:33017   | information_schema | Sleep          |      30 |                                 | NULL                                                        |
|   3069859 | aurora          | 100.104.XX.XX:41872   | information_schema | Sleep          |      30 |                                 | NULL                                                        |
|   3069925 | aurora          | 10.111.204.224:20916  | NULL               | Sleep          |       2 |                                 | NULL                                                        |
|   3069932 | aurora          | 10.111.211.209:51263  | NULL               | Sleep          |       2 |                                 | NULL                                                        |
| 270526156 | zyg_root        | 172.17.28.253:46272   | test               | Query          |       0 | starting                        | /*force_node='pi-bp10k7631d6k3****'*/ show processlist      |
+-----------+-----------------+-----------------------+--------------------+----------------+---------+---------------------------------+-------------------------------------------------------------+
20 rows in set (0.00 sec)

可以看到线程3810574持有了 test/t1 表的SHARED_READ锁,导致线程3810086无法获取到EXCLUSIVE锁。借助performance_schema.threads表,进一步获取对应线程的详细信息。查询结果如下:

/*force_node='pi-bp10k7631d6k3****'*/ SELECT * FROM performance_schema.threads WHERE THREAD_ID IN (3810086,3810574)\G
*************************** 1. row ***************************
          THREAD_ID: 3810086
               NAME: thread/sql/one_connection
               TYPE: FOREGROUND
     PROCESSLIST_ID: 3067041
   PROCESSLIST_USER: zyg_root
   PROCESSLIST_HOST: 172.17.28.253
     PROCESSLIST_DB: test
PROCESSLIST_COMMAND: Query
   PROCESSLIST_TIME: 41
  PROCESSLIST_STATE: Waiting for table metadata lock
   PROCESSLIST_INFO: alter table t1 add column d varchar(10),algorithm = inplace
   PARENT_THREAD_ID: NULL
               ROLE: NULL
       INSTRUMENTED: YES
            HISTORY: YES
    CONNECTION_TYPE: TCP/IP
       THREAD_OS_ID: 64852
     RESOURCE_GROUP: NULL
*************************** 2. row ***************************
          THREAD_ID: 3810574
               NAME: thread/sql/one_connection
               TYPE: FOREGROUND
     PROCESSLIST_ID: 3067443
   PROCESSLIST_USER: zyg_root
   PROCESSLIST_HOST: 172.17.28.253
     PROCESSLIST_DB: test
PROCESSLIST_COMMAND: Sleep
   PROCESSLIST_TIME: 46
  PROCESSLIST_STATE: NULL
   PROCESSLIST_INFO: NULL
   PARENT_THREAD_ID: NULL
               ROLE: NULL
       INSTRUMENTED: YES
            HISTORY: YES
    CONNECTION_TYPE: TCP/IP
       THREAD_OS_ID: 65845
     RESOURCE_GROUP: NULL
2 rows in set (0.01 sec)
  • 可以看到线程3810086即为被阻塞的DDL线程,而线程3810574则为一个慢查询。线程3810086持有了锁,导致 alter table t1 add column d varchar(10),algorithm = inplace 语句无法获取到MDL锁,因此处于阻塞状态。至此,您可以结合实际业务需求,等待事务提交或者使用 KILL [processlist_id] 命令中止事务后,重新执行

  • alter table t1 add column d varchar(10),algorithm = inplace

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

京东商品信息快速获取:API返回值实战教程

京东商品信息快速获取通常通过调用京东的API接口来实现,特别是针对商品搜索和商品详情等需求。以下是一个基于京东商品信息API返回值的实战教程,帮助您快速理解和利用这些API返回的数据。 1. 注册与认证 首先,您需要在京东开放平台&#xf…

Python爬虫的这几个实用技巧你都知道吗?

Python爬虫是一种强大的网络数据抓取工具,通过编写Python脚本来自动化地访问网页、提取所需信息并保存到本地。以下是Python爬虫的8大实用技巧,详细讲解如下: 1. 发送HTTP请求 基本方法:使用requests库发送HTTP请求是Python爬虫…

【学术会议征稿】第五届机械工程、智能制造与自动化技术国际学术会议(MEMAT 2024)

第五届机械工程、智能制造与自动化技术国际学术会议(MEMAT 2024) The 5th International Conference on Mechanical Engineering, Intelligent Manufacturing and Automation Technology 目前,我国自动化技术随着科学技术水平的不断提高已经…

责任链设计模式详解

责任链设计模式详解 一、定义 责任链设计模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合。这种模式将这些对象连接成一条链,并沿着…

麒麟kylin v10 sp3 升级glibc2.28 到 2.31

1. 下载glibc 2.31 wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.31.tar.gz 2.解压 tar -xf glibc-2.31.tar.gz cd glibc-2.31 mkdir build && cd build 3.修改 Makefile 125行添加一行 yum reinstall libxcrypt -y scripts/test-installation.pl 128行修…

java Boss直聘爬虫数据分析

摘要 本报告利用Java和Selenium爬虫技术获取数据,并使用ECharts库对薪资数据进行可视化分析,旨在探究不同经验和学历的薪资分布情况。 数据来源 数据来源于Boss直聘,使用Java结合Selenium库进行数据抓取。 数据总数:约2000家企…

虚幻引擎(Unreal Engine)技术使得《黑神话悟空传》大火,现在重视C++的开始吃香了,JAVA,Go,Unity都不能和C++相媲美!

虚幻引擎(Unreal Engine)火了黑神话游戏。 往后,会有大批量的公司开始模仿这个赛道! C 的虚拟引擎技术通常指的是使用 C 语言开发的游戏引擎,如虚幻引擎(Unreal Engine)等。以下是对 C 虚拟引…

[WUSTCTF2020]spaceclub(我把输入的字符切片研究了)

上sublime txt 每一行的长短对应一个二进制位,长空格是1,短空格是0,全部替换掉得到 上python脚本 import binasciiwith open(attachment_5.txt, r) as file:lines file.readlines() # 逐行读取文本内容output # 初始化输出字符串# 遍历…

【C++题解】1145. 数列求和

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1145. 数列求和 类型:递归基础 题目描述: 有一数列如下: 1 2 4 7 11 16 22 …… 试求该数列前 N 项之和。 输入: 一个整数 N &…

STM32G474定时器触发1次引起ADC转换直至DMA请求传输完所有通道的数据

STM32G474使用定时器1触发1次ADC转换,然后交给DMA循环执行,实现多通道ADC转换和多通道数据传输。若定时器1停止工作,则ADC转换也会随之停止,当然也不会再有DMA数据传输。 1、ADC触发信号分配 2、DMA多路复合器分配,指…

微信表情包格式推荐要求:240*240 +gif

微信表情包格式要求:240*240 gif

2024了,Neo4j能显示节点图片吗?

经过一番调研,答案是官方的是不能的.但有一个中文版可以显示网络图片作为节点背景 如通义千问说说: Neo4j 图数据库本身并不直接支持在节点中存储和显示图片。但是,你可以通过几种方式间接实现这一功能:1. 存储图片URL 最简单的…

K8S持久化存储数据

环境: Ubuntu-1:192.168.114.110作为主 Ubuntu-2:192.168.114.120作为从1,node节点1 Ubuntu-3:192.168.114.130作为从2,node节点2 持久化volumeMounts pod里面:emptyDir和hostPath。存储在node,NFS...,Clo…

微软Win11 24H2最新可选更新补丁26100.1591发布!

系统之家于8月28日发出最新报道,微软面向Win11 24H2用户推出八月最新的可选更新KB5041865,系统更新后版本号升至26100.1591。本次更新进行了多项改进,还优化了小组件面板。接下来,跟随小编一起深入了解这次更新的详细内容吧。 更新…

RSA非对称性加密02: 加密redis的连接密码(下)-私钥加密,公钥解密

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.2 上文传送门 2. 使用方式2.1 使用druid自带的RSA加密工具2.1.1 引入druid依赖2.1.2 原yml配置(对比使用)2.1.2 新yml配置 2.2 springboot的redis配置类2.2.1 例如在RedisConfig中2.2.2 设置序列化与反序列化代码示例如下: 2.3 …

Golang小项目(1)

Golang小项目(1) 前言 本项目适合Golang初学者,通过简单的项目实践来加深对Golang的基本语法和Web开发的理解。 建议前往 torna.top 查阅效果更佳 项目结构 . ├── main.go └── static├── form.html└── index.html项目流程图 定义三个路由: /:首页,显示static…

SWOT分析:解锁个人优势,规划未来成功路径

在传统的SWOT分析中,人们常常采用手工绘制的方式来创建图表,这种方式不仅过程繁琐,而且耗费大量时间和精力。为了简化这一流程,本文推荐使用可免费使用的实时在线编辑工具——即时白板,它是一款高效便捷的SWOT分析工具…

照片清晰度修复,这里总结了三种方法

照片清晰度修复,在数字化时代,照片不仅记录着生活的点滴,更承载着我们的情感和回忆。如今,有许多珍贵的老照片逐渐失去了原有的清晰度,变得模糊不堪。但随着科技的发展,我们有了多种方法来修复这些模糊的照…

专利检索的重要性

专利检索的重要性

从零开学C++:string类

引言:现在我们将正式踏入C起飞阶段,C语言自带的各种类能极大地简化我们所编写的代码的量,而我们今天要学的string就是其中之一。 更多有关C的知识点详解可前往个人主页:计信猫​​​​​ 一,认识string string其实很简…