成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL 實(shí)戰(zhàn)筆記 第02期:MySQL 元數(shù)據(jù)鎖

數(shù)據(jù)庫(kù) MySQL
當(dāng)我們?cè)?MySQL 中執(zhí)行 DDL 語(yǔ)句時(shí),經(jīng)常會(huì)發(fā)現(xiàn)語(yǔ)句沒(méi)有在你預(yù)期的時(shí)間完成,這時(shí)候我們通常會(huì)使用 show full processlist ,來(lái)看看發(fā)生了什么狀況。當(dāng)你看到 waiting for table metadata lock 時(shí),那就碰到元數(shù)據(jù)鎖了。那元數(shù)據(jù)鎖是怎樣產(chǎn)生的又應(yīng)該怎樣避免呢?讓我們從這篇文章開(kāi)始了解它。

當(dāng)我們?cè)?MySQL 中執(zhí)行 DDL 語(yǔ)句時(shí),經(jīng)常會(huì)發(fā)現(xiàn)語(yǔ)句沒(méi)有在你預(yù)期的時(shí)間完成,這時(shí)候我們通常會(huì)使用 show full processlist ,來(lái)看看發(fā)生了什么狀況。當(dāng)你看到 waiting for table metadata lock 時(shí),那就碰到元數(shù)據(jù)鎖了。那元數(shù)據(jù)鎖是怎樣產(chǎn)生的又應(yīng)該怎樣避免呢?讓我們從這篇文章開(kāi)始了解它。

1、什么是元數(shù)據(jù)鎖

MDL 全稱為 metadata lock,即元數(shù)據(jù)鎖,一般也可稱為字典鎖。MDL 的主要作用是為了管理數(shù)據(jù)庫(kù)對(duì)象的并發(fā)訪問(wèn)和確保元數(shù)據(jù)一致性。元數(shù)據(jù)鎖適用對(duì)象包含:table、schema、procedures, functions, triggers, scheduled events、tablespaces 。

2、加鎖規(guī)則

獲取規(guī)則:

  • 語(yǔ)句逐個(gè)( one by one )獲取元數(shù)據(jù)鎖,不是同時(shí)獲取,并在獲取過(guò)程中執(zhí)行死鎖檢測(cè)。
  • DML 語(yǔ)句獲取鎖按照語(yǔ)句中 table 出現(xiàn)的順序來(lái)獲取鎖。
  • DDL 語(yǔ)句、LOCK TABLES 和其他類似語(yǔ)句按名稱順序獲取鎖,對(duì)于隱式使用的表(例如外鍵關(guān)系中也必須鎖定的表)可能會(huì)以不同的順序獲取鎖。
  • DDL 的寫鎖請(qǐng)求優(yōu)先級(jí)高于 DML

3、模擬加鎖規(guī)則

兩個(gè)相同表結(jié)構(gòu)的表 t 和 t_new 開(kāi)始。三個(gè)線程來(lái)操作這些表:

場(chǎng)景一

線程 1:

  1. LOCK TABLE t WRITE, t_new WRITE; 

該語(yǔ)句按表名順序在 t 和 t_new 上獲取寫鎖

線程 2:

  1. INSERT INTO t VALUES(1); 

該語(yǔ)句處于也需要獲取表 t 上的 MDL 所以處于等待狀態(tài)

線程 3:

  1. RENAME TABLE t TO t_old, t_new TO t; 

該語(yǔ)句需要按表名順序在 t 、t_new、t_old 上獲取互斥鎖,所以也處于等待狀態(tài)

線程 1:

  1. UNLOCK TABLES; 

該語(yǔ)句釋放對(duì) t 和 t_new 的寫鎖定。線程 3 對(duì) t 加寫鎖的優(yōu)先級(jí)高于 線程 2 ,因此線程 3 在 t 上優(yōu)先獲得互斥鎖,然后依次在 t_new、t_old 上獲取互斥鎖,執(zhí)行重命名后釋放其鎖定。線程 2 獲得 t 上的寫鎖,執(zhí)行插入操作,然后釋放其鎖定。rename 操作在 insert 之前執(zhí)行。

場(chǎng)景二

兩個(gè)具有相同表結(jié)構(gòu)的表 t 和 new_t ,同樣是三個(gè)線程來(lái)操作這些表

線程 1:

  1. LOCK TABLE t WRITE, new_t WRITE; 

該語(yǔ)句按表名順序在 new_t 和 t 上獲取寫鎖

線程 2:

  1. INSERT INTO t VALUES(1); 

該語(yǔ)句處于也需要獲取表 t 上的 MDL 所以處于等待狀態(tài)

線程 3:

  1. RENAME TABLE t TO old_t, new_t TO t; 

該語(yǔ)句需要按表名順序在 new_t 、old_t、t 上獲取互斥鎖,所以也處于等待狀態(tài)

該語(yǔ)句釋放對(duì) t 和 new_t 的寫鎖定。對(duì)于 t 首先發(fā)起鎖請(qǐng)求的是線程 2 ,因此線程 2 優(yōu)先獲得了 t 上的元數(shù)據(jù)寫鎖,執(zhí)行完插入操作,然后釋放該鎖。線程 3 首先獲取的是 new_t 、old_t 的互斥鎖,最后才會(huì)請(qǐng)求 t 上的互斥鎖,所以線程 3 在線程 2 執(zhí)行完畢之前都是處于等待狀態(tài)的。rename 操作在 insert 操作之后。

4、 如何監(jiān)控元數(shù)據(jù)鎖

performance_schema.metadata_locks 表中記錄了元數(shù)據(jù)鎖相關(guān)的信息,開(kāi)啟方式如下:在線開(kāi)啟 metadata_locks,操作如下:

  1. --UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME ='global_instrumentation'; 
  2. --此值默認(rèn)已開(kāi)啟了,可檢查確認(rèn)。 
  3.  
  4. UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME ='wait/lock/metadata/sql/mdl'

若可停庫(kù)維護(hù),則在 my.cnf 中添加如下:

  1. [mysqld] 
  2. performance-schema-instrument='wait/lock/metadata/sql/mdl=ON' 

5、如何優(yōu)化元數(shù)據(jù)鎖

MDL 鎖一旦發(fā)生會(huì)對(duì)業(yè)務(wù)造成極大影響,因?yàn)楹罄m(xù)所有對(duì)該表的訪問(wèn)都會(huì)被阻塞,造成連接積壓。我們?nèi)粘RM量避免 MDL 鎖的發(fā)生,下面給出幾點(diǎn)優(yōu)化建議可供參考:

  • 開(kāi)啟 metadata_locks 表記錄 MDL 鎖。
  • 設(shè)置參數(shù) lock_wait_timeout 為較小值,使被阻塞端主動(dòng)停止。
  • 規(guī)范使用事務(wù),及時(shí)提交事務(wù),避免使用大事務(wù)。
  • 增強(qiáng)監(jiān)控告警,及時(shí)發(fā)現(xiàn) MDL 鎖。
  • DDL 操作及備份操作放在業(yè)務(wù)低峰期執(zhí)行。 

 

責(zé)任編輯:龐桂玉 來(lái)源: 楊建榮的學(xué)習(xí)筆記
相關(guān)推薦

2020-12-24 17:40:00

MySQL角色管理數(shù)據(jù)庫(kù)

2024-02-01 12:32:35

MySQL數(shù)據(jù)鎖數(shù)據(jù)庫(kù)

2018-01-18 20:47:18

CPU數(shù)據(jù)線程

2018-06-21 13:50:33

MySQL主從信息元數(shù)據(jù)

2021-12-14 08:10:00

MySQL行鎖間隙鎖

2009-06-16 13:09:15

Hibernate實(shí)戰(zhàn)Hibernate

2009-06-18 14:20:45

hibernate實(shí)戰(zhàn)

2022-03-29 10:52:08

MySQL數(shù)據(jù)庫(kù)

2017-07-10 13:38:07

MySQL數(shù)據(jù)類型整數(shù)類型

2010-11-22 14:27:05

MySQL鎖表

2017-06-14 23:08:29

報(bào)表數(shù)據(jù)計(jì)算層

2022-02-08 17:39:04

MySQL服務(wù)器存儲(chǔ)

2016-07-15 09:08:12

V課堂數(shù)字化制造

2010-06-04 09:33:28

連接MySQL數(shù)據(jù)庫(kù)

2024-08-22 14:16:08

2021-12-13 17:36:14

技術(shù)資訊

2018-05-21 16:13:18

工業(yè)互聯(lián)網(wǎng)信息化通信

2010-06-07 13:30:15

2024-11-29 07:38:12

MySQL數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日本久久精品视频 | 日韩在线免费视频 | 午夜精品久久久久久久星辰影院 | 蜜桃传媒一区二区 | 天天干夜夜操 | 国产激情网站 | 亚洲精品一区二区三区中文字幕 | 91久久国产综合久久91精品网站 | 国产精品日韩在线 | 日韩aⅴ片| 久久综合一区二区三区 | 日本激情视频在线播放 | 91精品一区二区三区久久久久 | 国产成人av电影 | 91资源在线观看 | 亚洲一区二区三区免费视频 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 色橹橹欧美在线观看视频高清 | 黄免费在线 | 亚洲精品久久久久中文字幕二区 | 天天综合久久 | www.日韩av.com | 精品三级在线观看 | 一级片免费网站 | 久久成人免费 | 日本一区二区三区四区 | 免费天天干 | 日本一区二区电影 | 亚洲国产精品区 | 国产成人精品一区二区三区网站观看 | 精品久久久久一区 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 亚洲在线| 欧美一区二区另类 | 亚洲欧美日韩久久 | 精品成人佐山爱一区二区 | 9久久精品 | 亚洲视频第一页 | 亚洲毛片网站 | 国产精品揄拍一区二区 | 久久精品亚洲精品 |