精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

生產運維腳本引發的 MDL 鎖故障排查之旅

運維
當事務持有?SHARED_UPGRADABLE?鎖時,可以根據操作需求將其升級為?SHARED_NO_WRITE?鎖(允許讀取但不允許寫入)或?EXCLUSIVE?鎖(獨占鎖,不允許其他事務同時訪問)。這種升級機制在數據庫操作中用于確保數據的一致性和并發控制。

1. 故障背景

在生產環境中,DBA 經常需要執行 DDL 變更操作。在此過程中,無法獲取 MDL(元數據鎖)的問題時有發生。

當執行 show processlist 命令時,若出現 waiting for table metadata lock 提示,這表明數據庫遭遇了 MDL 元數據鎖問題。

為此,筆者結合以往生產故障案例,梳理 MDL 鎖問題的排查思路與方法。

2. 問題重現

2.1 一個有隱患的腳本

生產運維腳本調用了連接池,但在執行完數據庫操作后,未關閉數據庫游標與連接,這為后續的 MDL 鎖問題埋下了隱患。

import mysql.connector
from dbutils.pooled_db import PooledDB
# 數據庫連接信息
pool = PooledDB(
    creator=mysql.connector,  # 使用mysql.connector作為數據庫驅動
    mincached=1,  # 連接池中空閑連接的初始數量
    maxcached=10,  # 連接池中空閑連接的最大數量
    maxshared=3,  # 共享連接的最大數量
    maxconnections=15,  # 連接池允許的最大連接數
    blocking=True,  # 當連接池達到最大連接數時,是否阻塞等待
    host='xx.xx.xx.xx',
    user='wms',
    password='123456',
    database='wms',
    unix_socket='/data/mysql8.0.23-3306/mysql-8.0.23/mysql3306.sock'
)
try:
    # 從連接池中獲取一個連接
    conn = pool.connection()
    cursor = conn.cursor()
    # 執行查詢語句
    sql = "SELECT * FROM wms.order_info LIMIT 1;"
    cursor.execute(sql)
    results = cursor.fetchall()
    for row in results:
        print(row)
    # 不釋放連接和連接池,模擬連接未釋放的情況
    # cursor.close()
    # conn.close()
    # 保持程序運行,方便在其他會話中執行 DDL 操作
    whileTrue:
        pass
except mysql.connector.Error as err:
    print(f"Error: {err}")

2.2 模擬生產 DDL 操作

變更窗口:DBA 在數據庫中進行相關表的 DDL 操作時,問題逐漸顯現。

// 執行腳本
[root@11-186-63-123 opt]# python3.8 pool.py

// 會話1:對該表加字段,執行 DDL 操作,發現 DDL 掛起
ALTER TABLE wms.order_info MODIFY COLUMN status varchar(35);

// 會話2:檢查數據庫會話,發現產生 MDL 鎖
mysql> select * from information_schema.processlist where command != 'Sleep';
+--------+-----------------+---------------------+------+------------------+---------+---------------------------------------------------------------+---------------------------------------------------------------------+
| ID     | USER            | HOST                | DB   | COMMAND          | TIME    | STATE                                                         | INFO                                                                |
+--------+-----------------+---------------------+------+------------------+---------+---------------------------------------------------------------+---------------------------------------------------------------------+
|     57 | repl            | 11.186.63.118:36624 | NULL | Binlog Dump GTID | 2872846 | Master has sent all binlog to slave; waiting for more updates | NULL                                                                |
| 377524 | root            | localhost           | wms  | Query            |      37 | Waiting for table metadata lock                               | ALTER TABLE wms.order_info MODIFY COLUMN status varchar(35)         |
|      5 | event_scheduler | localhost           | NULL | Daemon           | 3022562 | Waiting onempty queue                                        | NULL                                                                |
| 378462 | root            | localhost           | NULL | Query            |       0 | executing                                                     | select * from information_schema.processlist where command != 'Sleep' |
+--------+-----------------+---------------------+------+------------------+---------+---------------------------------------------------------------+---------------------------------------------------------------------+
4rowsinset (0.00 sec)

// 會話3:讀寫操作均被阻塞,業務受到影響
mysql> select * from wms.order_info limit 1;
mysql> insert into order_info values(9911131,121,'2012-12-12 12:00:00','1',1);

由于等待獲取 MDL 鎖,對該表的任何操作都處于阻塞狀態,嚴重影響業務。

3. 排查思路

3.1 查看當前已持有的 MDL 鎖的事務信息

select OBJECT_SCHEMA,OBJECT_NAME,COLUMN_NAME,LOCK_TYPE,LOCK_STATUS,OWNER_THREAD_ID from performance_schema.metadata_locks where OBJECT_NAME='order_info';
+---------------+-------------+-------------+-------------------+-----------+-----------------+
| OBJECT_SCHEMA | OBJECT_NAME | COLUMN_NAME | LOCK_TYPE         | LOCK_STATUS | OWNER_THREAD_ID |
+---------------+-------------+-------------+-------------------+-----------+-----------------+
| wms           | order_info  | NULL        | SHARED_UPGRADABLE | GRANTED     |          392740 |
| wms           | order_info  | NULL        | EXCLUSIVE         | PENDING     |          392740 |
| wms           | order_info  | NULL        | SHARED_READ       | GRANTED     |          392747 |
+---------------+-------------+-------------+-------------------+-----------+-----------------+
3 rows in set (0.00 sec)

## LOCK_STATUS:表示鎖的當前狀態;GRANTED(已授予鎖),PENDING(等待授予鎖)。

從查詢結果可以推斷,有一個事務(線程 ID 為 392747)持有 order_info 表的共享讀鎖,另一個事務(線程 ID 為 392740)持有 SHARED_UPGRADABLE(共享升級鎖),并試圖將其升級為 EXCLUSIVE (排他鎖),但由于共享鎖的存在而等待。

3.2 根據線程 ID 獲取 MySQL 的 processlist_id

mysql> select THREAD_ID,PROCESSLIST_ID from performance_schema.threads where thread_id in (392740,392747);
+-----------+----------------+
| THREAD_ID | PROCESSLIST_ID |
+-----------+----------------+
|    392740 |         392568 |
|    392747 |         392575 |
+-----------+----------------+
2 rows in set (0.00 sec)

3.3 根據 processlist_id 獲取 sql_text

mysql> SELECT a.thread_id, a.sql_text  FROM performance_schema.events_statements_current a  WHERE a.THREAD_ID IN (     SELECT b.THREAD_ID      FROM performance_schema.threads b      WHERE b.PROCESSLIST_ID IN (392568, 392575) );
+-----------+-------------------------------------------------------------+
| thread_id | sql_text                                                    |
+-----------+-------------------------------------------------------------+
|    392740 | ALTER TABLE wms.order_info MODIFY COLUMN status varchar(30) |
|    392747 | SELECT * FROM wms.order_info LIMIT 1                        |
+-----------+-------------------------------------------------------------+
2 rows inset (0.00 sec)

綜上所述:select 查詢會話產生的 SHARED_READ(共享讀鎖),導致 SHARED_UPGRADABLE(共享升級鎖)無法升級為 EXCLUSIVE (排他鎖),故導致 DDL 掛起。

4. 解決方案

為了解決 DDL 掛起的問題,需要殺死持有 order_info 表共享讀鎖的相關事務。

kill 392575;

執行上述命令后,可以看到 DDL 操作成功執行。

mysql> ALTER TABLE wms.order_info MODIFY COLUMN status varchar(30);
Query OK, 1000001 rows affected (14 min 53.45 sec)
Records: 1000001  Duplicates: 0  Warnings: 0

5. 總結

5.1 鎖分類

鎖類型

作用范圍

核心作用

查看方法

行鎖

InnoDB 

存儲引擎層

實現事務并發控制與數據一致性,通過索引記錄鎖標志鎖定特定行,執行中自動獲取和釋放

可通過 SHOW ENGINE INNODB STATUS 查看行鎖相關信息

MDL 鎖

MySQL

Server 層

保護表元數據,操作表時自動獲取,防止表結構被修改

若有事務持有 MDL 寫鎖,其他等待獲取 MDL 鎖的會話會顯示處于 Waiting for table metadata lock 狀態。

全局鎖

MySQL

Server 層

對整個數據庫實例鎖定,執行 FLUSH TABLES WITH READ LOCK 獲取全局讀鎖,使數據庫只讀,阻塞寫操作,常用于數據庫邏輯備份保證數據一致性

1. SHOW PROCESSLIST 查看加鎖會話語句

2. 觀察寫操作會話,等待時顯示 Waiting for global read lock

5.2 共享升級鎖

SHARED_UPGRADABLE 是一種元數據鎖(Metadata Lock,簡稱 MDL),屬于 MySQL 中的鎖類型之一。它允許持有該鎖的事務在特定條件下將鎖升級為其他類型,如 EXCLUSIVE 鎖或 SHARED_NO_WRITE 鎖 。

升級機制

當事務持有 SHARED_UPGRADABLE 鎖時,可以根據操作需求將其升級為 SHARED_NO_WRITE 鎖(允許讀取但不允許寫入)或 EXCLUSIVE 鎖(獨占鎖,不允許其他事務同時訪問)。這種升級機制在數據庫操作中用于確保數據的一致性和并發控制。例如,在對表結構進行修改(如 DDL操作)時,可能需要將 SHARED_UPGRADABLE 鎖升級為 EXCLUSIVE 鎖,以防止其他事務在表結構修改過程中對表進行讀寫操作。

5.3 如何優化與避免 MDL 鎖

MDL 鎖一旦發生,會對業務造成極大影響,因為后續所有對該表的訪問都會被阻塞,導致連接積壓。為了盡量避免 MDL 鎖的發生,以下是幾點優化建議:

  • 開啟 metadata_locks 表記錄 MDL 鎖,以便更好地監控和分析鎖的使用情況。
  • 設置參數 lock_wait_timeout 為較小值,使被阻塞的操作能夠主動停止,避免長時間等待。
  • 規范使用事務,及時提交事務,避免使用大事務,減少鎖的持有時間。
  • 增強監控告警,及時發現 MDL 鎖問題,以便及時采取措施解決。
  • 將 DDL 操作及備份操作放在業務低峰期執行,減少對業務的影響。
  • 少用工具開啟事務進行查詢,圖形化工具使用后要及時關閉,避免不必要的鎖占用。
  • 規范運維腳本的使用,避免出現未關閉數據庫游標與連接等情況,本次故障就是由這種情況引發的。
責任編輯:武曉燕 來源: 愛可生開源社區
相關推薦

2020-09-25 11:10:51

運維故障排查監控

2021-10-28 17:05:11

IT運維故障

2020-11-12 11:00:42

運維IT架構

2018-09-10 05:03:51

網絡故障故障排查運維

2012-08-31 14:00:40

IT運維

2022-04-12 08:43:04

生產故障Dubbo調用

2023-11-10 07:23:57

Kubernetes集群網絡

2020-07-08 10:36:18

Linux 運維 數據

2021-07-21 16:22:40

運維架構技術

2017-07-25 10:53:27

2018-03-01 19:40:44

Linux運維常見問題

2024-01-08 16:14:40

美圖AIGC運維

2025-08-06 06:05:00

網絡故障Linux命令

2018-06-29 10:36:29

阿里云互聯網故障

2012-03-01 14:43:32

MySQLMDL

2013-08-04 21:44:48

運維故障故障排查云計算

2013-03-04 01:54:41

BYOD網絡建設網絡基礎架構

2019-04-01 14:39:32

Node.js故障排查

2020-06-12 13:26:03

線程池故障日志

2014-04-02 10:56:21

點贊
收藏

51CTO技術棧公眾號

久久99日本精品| 国产精品久久久久久久| 欧美性高潮在线| 亚洲日本一区二区三区在线不卡| 国产夫绿帽单男3p精品视频| 国产日韩综合| 精品国产美女在线| 少妇精品一区二区| 999色成人| 一本色道久久综合亚洲aⅴ蜜桃| 制服诱惑一区| 理论视频在线| 成人精品国产福利| 成人免费激情视频| 成年人视频免费| 亚洲福利免费| 久久国产精品久久久久| 欧美 日韩 国产 成人 在线观看 | 日韩av成人| 国产精品91xxx| 国产精品午夜视频| 亚洲天堂一区在线| 国产一区二区中文| 久久精品国产亚洲精品| 国产一二三四五区| 六月丁香久久丫| 欧美变态tickle挠乳网站| 亚洲黄色小视频在线观看| 依依综合在线| 同产精品九九九| 男人添女荫道口女人有什么感觉| 拍真实国产伦偷精品| 国产欧美一区二区精品仙草咪 | 黄色aaaaaa| 日本一区二区三区视频在线| 欧美午夜精品久久久久久久| 日本免费a视频| av电影免费在线观看| 国产精品欧美一级免费| 日韩在线三级| 成人高清网站| 中文字幕免费一区| 日韩精品福利视频| 国产精品99999| 国产欧美综合色| 日韩精彩视频| 生活片a∨在线观看| 国产精品天天摸av网| 欧洲久久久久久| 黄色影院在线播放| 亚洲国产精品av| 色涩成人影视在线播放| 777电影在线观看| 中文欧美字幕免费| 中文字幕在线中文字幕日亚韩一区 | 亚洲国产成人不卡| 在线看的av网站| 综合色天天鬼久久鬼色| 国产三级中文字幕| 女子免费在线观看视频www| 亚洲一卡二卡三卡四卡| 国产中文字幕二区| 成人性生活视频| 色婷婷亚洲精品| 另类小说第一页| 9999精品| 精品精品国产高清一毛片一天堂| 人妻av一区二区| 亚洲婷婷丁香| www.日韩不卡电影av| 国产精品国产三级国产传播| 欧美另类女人| 91大神在线播放精品| 最近免费中文字幕大全免费版视频| 欧美亚洲三区| 成人精品久久久| www日本高清视频| 91在线国产观看| 五月天亚洲综合| 成人无遮挡免费网站视频在线观看| 亚洲综合免费观看高清完整版| 少妇人妻无码专区视频| 欧美人体一区二区三区| 欧美美女一区二区三区| 亚洲色偷偷色噜噜狠狠99网 | 亚洲天堂电影网| 色帝国亚洲欧美在线| 精品国产乱码久久久久酒店| 密臀av一区二区三区| 涩爱av色老久久精品偷偷鲁| 日韩av在线网| 国产男女猛烈无遮挡在线喷水| 黄色欧美日韩| 国产精品免费在线免费| 蜜桃久久一区二区三区| 欧美韩国一区二区| 日韩一级片免费视频| 欧美大片1688网站| 欧美精品一区二区不卡| 日韩av片在线免费观看| 亚洲黄页一区| 91免费的视频在线播放| 青青草在线视频免费观看| 成人欧美一区二区三区白人| 久久久999免费视频| а天堂中文最新一区二区三区| 亚洲韩国欧洲国产日产av| 99自拍视频在线| 午夜在线精品偷拍| 懂色中文一区二区三区在线视频| 国产在线高清| 黄色成人av网| 亚洲精品成人无码毛片| 日韩精品1区| 热99精品只有里视频精品| 性网爆门事件集合av| 国产精品乱人伦| 欧美性久久久久| 黑人久久a级毛片免费观看| 日韩视频亚洲视频| 中文资源在线播放| 97se亚洲国产综合自在线不卡| 少妇高潮大叫好爽喷水| 日本国产一区| 国产亚洲视频在线观看| 亚洲永久精品在线观看| 成人动漫一区二区在线| 可以在线看黄的网站| 日韩综合久久| 日韩在线免费视频| 综合久久中文字幕| 国产亚洲欧美中文| 男人天堂网视频| 视频小说一区二区| 91chinesevideo永久地址| 亚洲xxx在线| 亚洲综合另类小说| 人妖粗暴刺激videos呻吟| 狠狠入ady亚洲精品| av一区和二区| 91超碰免费在线| 精品乱人伦一区二区三区| 久久久一区二区三区四区| 国产91精品久久久久久久网曝门| 日韩国产精品毛片| 韩国一区二区三区视频| 久久电影一区二区| 国产福利免费视频| 亚洲一线二线三线久久久| 久久久久99人妻一区二区三区| 欧美88av| 国严精品久久久久久亚洲影视| 草美女在线观看| 日韩av在线网页| 五月婷婷激情视频| 国产日韩欧美一区二区三区乱码| 粉嫩虎白女毛片人体| 日韩亚洲一区在线| 91在线精品播放| 国产精品偷拍| 亚洲精品国产拍免费91在线| 丰满少妇乱子伦精品看片| 91视视频在线直接观看在线看网页在线看| 欧美 日韩 亚洲 一区| 亚洲资源网你懂的| 国产精品美乳一区二区免费| 麻豆视频在线观看免费网站| 欧美一区二区国产| 99热国产在线观看| 久久精品一级爱片| 五月天中文字幕在线| 欧美a级一区| 精品久久久三级| 欧美福利在线播放| 久久久精品一区二区三区| 亚洲女同志亚洲女同女播放| 欧美日韩在线第一页| 亚洲天堂精品一区| 成人午夜视频在线| 最新中文字幕免费视频| 欧美激情无毛| 日韩国产一区久久| 亚洲精品黑牛一区二区三区| 日本不卡高字幕在线2019| 黄色网址在线免费观看| 亚洲精品av在线播放| 在线观看视频二区| 五月激情综合色| 潘金莲一级黄色片| 久久一区二区三区四区| 亚洲一区二区中文字幕在线观看| 国产一区二区高清| 欧美大片免费播放| 精品亚洲成人| 国产精品12| 久久91超碰青草在哪里看| 欧美多人乱p欧美4p久久| 二区在线观看| 日韩精品一区二区视频| 国产又黄又爽视频| 色噜噜久久综合| 精品深夜av无码一区二区老年| 国产日韩欧美a| 日本少妇xxxx| 国产一本一道久久香蕉| 性欧美极品xxxx欧美一区二区| 欧美日一区二区在线观看 | 99re在线播放| 日本肉肉一区| 97视频在线观看成人| 成人日韩欧美| 色综合影院在线| 青青草观看免费视频在线| 日韩视频在线你懂得| 日韩av免费播放| 狠狠躁夜夜躁人人躁婷婷91| 欧美色图一区二区| 亚洲日本在线视频观看| 调教驯服丰满美艳麻麻在线视频| 99国产一区二区三精品乱码| 久久人人爽人人片| 国内一区二区视频| 一道本视频在线观看| 久久精品卡一| 麻豆av免费在线| 夜夜精品视频| 国产精品网站免费| 一区在线视频| 成年人午夜免费视频| 国产综合欧美| 久久这里只有精品8| 欧美韩国一区| 喜爱夜蒲2在线| 欧美久久影院| 99热久久这里只有精品| 国产精品videosex极品| 美女av免费观看| 欧美日韩中文| 久艹视频在线免费观看| 一区视频在线看| 久久久久久久久久久99| 亚洲在线网站| 亚洲国产精品久久久久爰色欲| 国产欧美一区二区三区国产幕精品| 成年人看的毛片| 亚洲精品乱码| 日本成年人网址| 久久aⅴ国产紧身牛仔裤| 日韩avxxx| 日韩福利视频导航| 久久婷婷综合色| 国内外成人在线视频| 日韩不卡的av| 成人激情小说乱人伦| 捆绑凌虐一区二区三区| 久久天天做天天爱综合色| 日本高清www| 国产精品入口麻豆九色| 中日韩一级黄色片| 亚洲国产中文字幕在线视频综合| 日韩 欧美 亚洲| 色狠狠av一区二区三区| 亚洲系列第一页| 日韩美女天天操| 神马午夜电影一区二区三区在线观看| 亚洲精品av在线| av在线天堂播放| 免费91麻豆精品国产自产在线观看| 秋霞在线视频| 国产97在线|日韩| 亚洲一区av| 国产一区二区高清不卡| 国产99久久| 熟女视频一区二区三区| 99国产精品视频免费观看一公开| av免费在线播放网站| 精品一区二区三区av| 国产51自产区| 日本一区二区三区四区在线视频 | 亚洲第一黄色| 久章草在线视频| 精品一区二区三区视频在线观看| 日本美女视频网站| 国产亚洲福利社区一区| 欧美黄色一级网站| 在线视频亚洲一区| 亚洲国产精品久久久久爰性色| 精品视频在线播放色网色视频| 在线观看av黄网站永久| 午夜免费在线观看精品视频| 日韩av电影资源网| 国产日韩一区欧美| 99热国内精品| 亚洲国产精品久久久久爰色欲| 国产精品综合一区二区| 在线不卡av电影| 亚洲国产精品尤物yw在线观看| 最近中文字幕在线观看| 亚洲国产精品网站| 超碰在线免费播放| 国产成人自拍视频在线观看| 日韩影片在线观看| 一区二区不卡在线| 亚洲欧美网站| 性高潮免费视频| 亚洲日本在线观看| 中文字幕男人天堂| 精品视频偷偷看在线观看| 青青草原av在线| 成人免费高清完整版在线观看| 久久综合影院| 99精品在线免费视频| 国产suv一区二区三区88区| 九九热久久免费视频| 色播五月激情综合网| 天堂91在线| 久久久久中文字幕2018| 国产精品麻豆| 一区二区三区视频| 日本不卡一区二区三区高清视频| 国产精品一区二区入口九绯色| 亚洲综合成人在线视频| 国产肥老妇视频| 久久综合久久八八| 亚洲精品一区二区在线播放∴| 日韩激情久久| 日韩精品一二区| 中文字幕免费高清| 日本高清无吗v一区| 日韩欧美电影在线观看| 97久久超碰福利国产精品…| 白嫩白嫩国产精品| 人人妻人人澡人人爽欧美一区 | 中文字幕无码人妻少妇免费| 夜夜嗨av一区二区三区中文字幕 | 国产成人综合欧美精品久久| 亚洲成人亚洲激情| 波多野结衣在线高清| 国产另类自拍| 99视频精品| 四虎影成人精品a片| 色琪琪一区二区三区亚洲区| 欧美日韩视频精品二区| 国产mv免费观看入口亚洲| 国产欧美日韩免费观看 | www成人在线| 日韩电影在线观看中文字幕 | 日韩黄色影视| 美腿丝袜亚洲一区| 午夜精品一区二区三级视频| 欧美一区国产二区| heyzo在线| 久久久久免费网| 日韩精彩视频在线观看| 黄色国产在线播放| 91精品在线一区二区| 色老头在线观看| 精品乱子伦一区二区三区| 先锋a资源在线看亚洲| 神马久久久久久久久久久| 欧美高清一级片在线| 在线heyzo| 九色综合日本| 日韩avvvv在线播放| 中文字幕在线观看成人| 亚洲国产精品久久久| av有声小说一区二区三区| 亚洲欧美成人一区| 国产凹凸在线观看一区二区| 国产成人无码精品| 中文字幕精品在线| 午夜精品在线| 免费激情视频在线观看| 亚洲欧洲日产国码二区| 免费看日韩av| 国产精品久久久久久av下载红粉| 91精品久久久久久久久久不卡| 午夜福利三级理论电影 | 天天干天天草天天| 一区二区三区精品久久久| 欧美激情综合色综合啪啪五月| 香蕉久久精品日日躁夜夜躁| 九九热99视频| 五月激情综合婷婷| 日本激情在线观看| 国产一区免费| 久久精品av麻豆的观看方式| 国产大片中文字幕| 伊人久久综合97精品| eeuss鲁片一区二区三区| 国产精品无码一本二本三本色| 亚洲综合男人的天堂| 91se在线| 欧美日韩高清在线一区| 国产成人亚洲综合a∨婷婷图片 | 国产激情在线播放| 亚洲国产精品123| 99精品国产91久久久久久| 国产成人精品无码高潮| 国产精品久久久久免费a∨大胸 |