mysql mdl 鎖_MySQL MDL鎖

MDL全稱為metadata lock,即元數據鎖。MDL鎖主要作用是維護表元數據的數據一致性,在表上有活動事務(顯式或隱式)的時候,不可以對元數據進行寫入操作。因此從MySQL5.5版本開始引入了MDL鎖,來保護表的元數據信息,用于解決或者保證DDL操作與DML操作之間的一致性。

模擬和定位MDL鎖

表結構

CREATE TABLE `t` (

`id` int(11) NOT NULL,

`c` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

會話模擬

session A

session B

lock table t write

select * from t where id =1

session A 通過 lock table 命令持有表 t 的 MDL 寫鎖,而 session B 的查詢需要獲取 MDL 讀鎖。所以,session B 進入等待狀態。

mysql> select * from processlist;

+------+--------+-----------+--------+---------+------+---------------------------------+---------------------------+

| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |

+------+--------+-----------+--------+---------+------+---------------------------------+---------------------------+

| 3582 | tenmao | localhost | tenmao | Sleep | 115 | | NULL |

| 3583 | tenmao | localhost | tenmao | Query | 97 | Waiting for table metadata lock | select * from t where t=1 |

+------+--------+-----------+--------+---------+------+---------------------------------+---------------------------+

沖突解決

這類問題的處理方式,就是找到誰持有 MDL 寫鎖,然后把它 kill 掉。但是,由于在 show processlist 的結果里面,session A 的 Command 列是“Sleep”,導致查找起來很不方便。不過有了 performance_schema 和 sys 系統庫以后,就方便多了。(MySQL 啟動時需要設置 performance_schema=on,相比于設置為 off 會有 10% 左右的性能損失)通過查詢 sys.schema_table_lock_waits 這張表,我們就可以直接找出造成阻塞的 process id,把這個連接用 kill 命令斷開即可。

mysql> SELECT blocking_pid FROM sys.schema_table_lock_waits;

+--------------+

| blocking_pid |

+--------------+

| 3582 |

+--------------+

如何優化與避免MDL鎖

MDL鎖一旦發生會對業務造成極大影響,因為后續所有對該表的訪問都會被阻塞,造成連接積壓。我們日常要盡量避免MDL鎖的發生,下面給出幾點優化建議可供參考:

開啟metadata_locks表記錄MDL鎖。

設置參數lockwaittimeout為較小值,使被阻塞端主動停止。

規范使用事務,及時提交事務,避免使用大事務。

增強監控告警,及時發現MDL鎖。

DDL操作及備份操作放在業務低峰期執行。

少用工具開啟事務進行查詢,圖形化工具要及時關閉。

參考

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394252.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394252.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394252.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Card Game Again CodeForces - 818E (雙指針)

大意: 給定序列, 求多少個區間積被k整除. 整除信息滿足單調性, 顯然雙指針. 具體實現只需要考慮k的素數向量, 對每一維維護個指針即可. 這題看了下cf其他人的做法, 發現可以直接暴力, 若當前的前綴積模k為0, 暴力向前求出第一個后綴積為0的位置即可, 復雜度是$O(n)$的并且相當好…

pacf和acf_如何通過Wordpress API,ACF和Express.js使Wordpress更加令人興奮

pacf和acfby Tyler Jackson泰勒杰克遜(Tyler Jackson) 如何通過Wordpress API,ACF和Express.js使Wordpress更加令人興奮 (How to make Wordpress more exciting with the Wordpress API, ACF, & Express.js) I’ve been working with Wordpress since it’s pr…

python運行出現數據錯誤_Python運行出錯情況

1、錯誤內容:You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory str). It is highly recommended that you instead just switch your application to Unicode strings.錯誤描述&#x…

leetcode95. 不同的二叉搜索樹 II(遞歸)

給定一個整數 n,生成所有由 1 ... n 為節點所組成的 二叉搜索樹 。示例:輸入:3 輸出: [[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3] ] 解釋: 以上的輸出對應以下 5 種不同結構的二叉搜索樹…

數據結構探險系列—棧篇-學習筆記

數據結構探險—棧篇 什么是棧? 古代棧就是牲口棚的意思。 棧是一種機制:后進先出 LIFO(last in first out) 電梯 棧要素空棧。棧底,棧頂。沒有元素的時候,棧頂和棧底指向同一個元素,如果加入新元…

MYSQL遠程登錄權限設置 ,可以讓Navicat遠程連接服務器的數據庫

Mysql默認關閉遠程登錄權限,如下操作允許用戶在任意地點登錄:1. 進入mysql,GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY WITH GRANT OPTION;IDENTIFIED BY后跟的是密碼,可設為空。2. FLUSH privileges; 更新Mysql為了安…

time series 時間序列 | fractional factorial design 部分要因試驗設計

作業: 1) A plot of data from a time series, which shows a cyclical pattern – please show a time series plot and identify the length of the major cycle. 2) Data from a full factorial or fractional factorial experiment with at least 2 factors –…

如何在Go中編寫防彈代碼:不會失敗的服務器工作流程

by Tal Kol通過塔爾科爾 如何在Go中編寫防彈代碼:不會失敗的服務器工作流程 (How to write bulletproof code in Go: a workflow for servers that can’t fail) From time to time you may find yourself facing a daunting task: building a server that really …

越獄第一至五季/全集迅雷下載

越獄 第一季 Prison Break Season 1 (2005) 本季看點:邁克爾斯科菲爾德是一頭陷于絕境欲拼死一搏的怒獅——他的哥哥林肯巴羅斯被認定犯有謀殺罪被投入了福克斯河監獄的死囚牢。雖然所有的證據都指出林肯就是兇手,邁克爾堅信兄長是無辜的。林肯的死刑執行…

leetcode面試題 16.19. 水域大小(深度優先搜索)

你有一個用于表示一片土地的整數矩陣land,該矩陣中每個點的值代表對應地點的海拔高度。若值為0則表示水域。由垂直、水平或對角連接的水域為池塘。池塘的大小是指相連接的水域的個數。編寫一個方法來計算矩陣中所有池塘的大小,返回值需要從小到大排序。 …

java -jar 默認參數_JAVA入門學習指南,建議收藏

如果你不懂Java 并且想認真學習接觸了解一下Java的語法,建議把這篇文章收藏了,多看幾遍,應該可以初步掌握Java 大部分基礎的語法 。 讓我們出發吧!ps:本文有點長,耐心閱讀 。〇,編程環境工程項目推薦使用ID…

【RabbitMQ】 WorkQueues

消息分發 在【RabbitMQ】 HelloWorld中我們寫了發送/接收消息的程序。這次我們將創建一個Work Queue用來在多個消費者之間分配耗時任務。 Work Queues(又稱為:Task Queues)的主要思想是:盡可能的減少執行資源密集型任務時的等待時…

python matplotlib庫安裝出錯_使用pip install Matplotlib時出現內存錯誤

我使用的是Python2.7,如果我試圖安裝Matplotlib,如果我使用“pip install Matplotlib”,就會出現這個錯誤Exception:Traceback (most recent call last):File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line …

笑看職場什么程序員才搶手,什么樣的程序員漲薪多?

?程序員,怎么才算合格,不好說吧;他就像銷售一樣,一名銷售員,比如網絡銷售賣茶葉,他賣茶葉很厲害呀,可是你讓他去銷售房地產,就算他有點銷售的基礎,也要重新去學怎么銷售…

Android畫布Canvas裁剪clipRect,Kotlin

Android畫布Canvas裁剪clipRect,Kotlin private fun mydraw() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.A…

調查|73%的公司正使用存在漏洞的超期服役設備

本文講的是調查|73%的公司正使用存在漏洞的超期服役設備,一份新近的調查覆蓋了北美350家機構的212000臺思科設備。結果顯示,73%的企業正在使用存在漏洞、超期服役的網絡設備。該數字在上一年僅為60%。 Softchoice公司思科部門業務主管大衛魏格…

為什么要做稀疏編碼_為什么我每天都要編碼一年,所以我也學到了什么,以及如何做。...

為什么要做稀疏編碼by Paul Rail由Paul Rail 為什么我每天都要編碼一年,所以我也學到了什么,以及如何做。 (Why I coded every day for a year, what I learned, and how you can do it, too.) I was looking to switch careers. The world today is no…

深度裝機大師一鍵重裝_筆記本怎么重裝系統?筆記本自己如何重裝系統?

如何給筆記本重裝系統呢?筆記本系統使用時間長了難免會運行緩慢,我們第一反應就是重裝系統筆記本了。但是很多小白用戶們就惆悵了,不知道筆記本怎么重裝系統,怎么進行重裝系統筆記本呢?首先,筆記本電腦可以重置系統,…

leetcode劍指 Offer 11. 旋轉數組的最小數字(二分查找)

把一個數組最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如,數組 [3,4,5,1,2] 為 [1,2,3,4,5] 的一個旋轉,該數組的最小值為1。 示例 1: 輸…

XMLHttpRequest狀態碼及相關事件

1.創建一個XMLHttpRequest對象 2.對XMLHttpRequest對象進行事件的監聽(定義監聽事件的位置不影響 3.對XMLHttpRequest對象的狀態碼 狀態 名稱描述0Uninitialized初始化狀態。XMLHttpRequest 對象已創建或已被 abort() 方法重置1Open open() 方法已調用,但是 send()…