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

MySQL源碼學習:MDL字典鎖

數據庫 MySQL
MDL,Meta Data lock,元數據鎖,一般稱為字典鎖。字典鎖與數據鎖相對應。字典鎖是為了保護數據對象被改變,一般是一些DDL會對字典對象改變,如兩個TX,TX1先查詢表,然后TX2試圖DROP,字典鎖就會lock住TX2,知道TX1結束(提交或回滾)。

什么是MDL

MDL,Meta Data lock,元數據鎖,一般稱為字典鎖。字典鎖與數據鎖相對應。字典鎖是為了保護數據對象被改變,一般是一些DDL會對字典對象改變,如兩個TX,TX1先查詢表,然后TX2試圖DROP,字典鎖就會lock住TX2,知道TX1結束(提交或回滾)。數據鎖是保護表中的數據,如兩個TX同時更新一行時,先得到row lock的TX會先執行,后者只能等待。

MDL的設計目標

字典鎖在設計的時候是為了數據庫對象的元數據。到達以下3個目的。

1. 提供對并發訪問內存中字典對象緩存(table definatin cache,TDC)的保護。這是系統的內部要求。

2. 確保DML的并發性。如TX1對表T1查詢,TX2同是對表T1插入。

3. 確保一些操作的互斥性,如DML與大部分DDL(ALTER TABLE除外)的互斥性。如TX1對表T1執行插入,TX2執行DROP TABLE,這兩種操作是不允許并發的,故需要將表對象保護起來,這樣可以保證binlog邏輯的正確性。(貌似之前的版本存在字典鎖是語句級的,導致 binlog不合邏輯的bug。)

支持的鎖類型

數據庫理論中的基本鎖類型是S、X,意向鎖IS、IX是為了層次上鎖而引入的。比如要修改表中的數據,可能先對表上一個表級IX鎖,然后再對修改的數據上一個行級X鎖,這樣就可以保證其他試圖修改表定義的事物因為獲取不到表級的X鎖而等待。

MySQL中將字典鎖的類型根據不同語句的功能,進一步細分,細分的依據是對字典的操作和對數據的操作。細分的好處是能在一定程度上提高并發效率,因為如果只定義X和S兩種鎖,必然導致兼容性矩陣的局限性。MySQL不遺余力的定義了如下的鎖類型。

名稱

意義

MDL_INTENTION_EXCLUSIVE

意向排他鎖,只用于范圍上鎖

MDL_SHARED

共享鎖,用于訪問字典對象,而不訪問數據。

MDL_SHARED_HIGH_PRIO

只訪問字典對象(如DESC TABLE)

MDL_SHARED_READ

共享讀鎖,用于讀取數據(如select)

MDL_SHARED_WRITE

共享寫鎖,用于修改數據(如update)

MDL_SHARED_NO_WRITE

共享非寫鎖,允許讀取數據,阻塞其他TX修改數據(如alter table)

MDL_SHARED_NO_READ_WRITE

用于訪問字典,讀寫數據

不允許其他TX讀寫數據

MDL_EXCLUSIVE

排他鎖,可以修改字典和數據

可以看到MySQL在ALTER TABLE的時候還是允許其他事務進行讀表操作的。需要注意的是讀操作的事物需要在ALTER TABLE獲取MDL_SHARED_NO_WRITE鎖之后,否則無法并發。這種應用場景應該是對一個較大的表進行ALTER時,其他事物仍然可以讀,并發性得到了提高。

鎖的兼容性

鎖的兼容性就是我們經常看到的那些兼容性矩陣,X和S必然互斥,S和S兼容。MySQL根據鎖的類型我們也可以知道其兼容矩陣如下:

 

IX

S

SH

SR

SW

SNW

SNRW

X

IX

1

1

1

1

1

1

1

1

S

1

1

1

1

1

1

1

0

SH

1

1

1

1

1

1

1

0

SR

1

1

1

1

1

1

0

0

SW

1

1

1

1

1

0

0

0

SNW

1

1

1

1

0

0

0

0

SNRW

1

1

1

0

0

0

0

0

X

1

0

0

0

0

0

0

0

1代表兼容,0代表不兼容。你可能發現X和IX竟然兼容,沒錯,其實這里的IX已經不是傳統意義上的IX,這個IX是用在范圍鎖上,所以和X鎖不互斥。

數據結構

涉及到的和鎖相關的數據結構主要是如下幾個:

MDL_context:字典鎖上下文。包含一個事物所有的字典鎖請求。

MDL_request:字典鎖請求。包含對某個對象的某種鎖的請求。

MDL_ticket:字典鎖排隊。MDL_request就是為了獲取一個ticket。

MDL_lock:鎖資源。一個對象全局唯一。可以允許多個可以并發的事物同時獲得。

涉及到的源碼文件主要是sql/mdl.cc

鎖資源

鎖資源在系統中是共享的,即全局的,存放在static MDL_map mdl_locks;的hash鏈表中,對于數據庫中的一個對象,其hashkey必然是唯一的,對應一個鎖資源。多個事務同時對一張表操作時,申請的 lock也是同一個內存對象。獲取mdl_locks中的lock需要通過全局互斥量保護起來 mysql_mutex_lock(&m_mutex); m_mutex是MDL_map的成員。

上鎖流程

一個會話連接在實現中對應一個THD實體,一個THD對應一個MDL_CONTEXT,表示需要的mdl鎖資源,一個MDL_CONTEXT中包含多個MDL_REQUEST,一個MDL_REQUEST即是對一個對象的某種類型的lock請求。每個mdl_request上有一個ticket對象,ticket中包含lock。

上鎖的也就是根據MDL_REQUEST進行上鎖。

  1. Acquire_lock:  
  2.     if (mdl_request contains the needed ticket )  
  3.     return ticket;  
  4.     End if;  
  5.     Create a ticket;  
  6.     If (!find lock in lock_sys)  
  7.     Create a lock;  
  8.     End if  
  9.     If (lock can be granted to mdl_request)  
  10.     Set lock to ticket;  
  11.     Set ticket to mdl_request;  
  12.     Else 
  13.     Wait for lock  
  14. End if 

稍微解釋下,首先是在mdl_request本身去查看有沒有相等的或者stronger的ticket,如果存在,則直接使用。否則創建一個 ticket,查找上鎖對象對應的lock,沒有則創建。檢查lock是否可以被賦給本事務,如果可以直接返回,否則等待這個lock;

鎖等待與喚醒

字典對象的鎖等待是發生在兩個事物對同一對象上不兼容的鎖導致的。當然,由于lock的唯一性,先到先得,后到的只能等待。

如何判斷一個lock是否可以grant給一個TX?這需要結合lock結構來看了,lock上有兩個成員,grant和wait,grant代表此 lock允許的事物都上了哪些鎖,wait表示等待的事務需要上哪些鎖。其判斷一個事物是否可以grant的邏輯如下:

  1. If(compatible(lock.grant, tx.locktype))  
  2.     If (compatible(lock.wait, tx.locktype))  
  3.     return can_grant;  
  4.     End if  
  5. End if 

即首先判斷grant中的鎖類型和當前事務是否兼容,然后判斷wait中的鎖類型和當前事務是否兼容。細心的話,會想到,wait中的鎖類型是不需要和當前事務進行兼容性比較的,這是不是說這個比較是多余的了?其實也不是,因為wait的兼容性矩陣和上面的矩陣是不一樣的,wait的兼容性矩陣感覺是在 DDL等待的情況下,防止DML繼續進來(wait矩陣就不寫出來了,大家可以去代碼里看下)。

比如:

TX1                    TX2                    TX3

SELECT T1

DROP  T1

SELECT T1

這時候TX2會阻塞,TX3也會阻塞,被TX2阻塞,也就是說被wait的事件阻塞了,這樣可能就是為了保證在DDL等待時,禁止再做DML了,因為在DDL面前,DML顯得確實不是那么重要了。

如何喚醒被等待的事務呢?比如喚醒TX2,當TX1結束時,會調用release_all_locks_for_name,對被鎖住的事務進行喚醒,具體操作封裝在reschedule_waiters函數中,重置等待時間的標記位進行喚醒,重點代碼如下:

  1. if (can_grant_lock(ticket->get_type(), ticket->get_ctx()))  
  2.     {  
  3.       if (! ticket->get_ctx()->m_wait.set_status(MDL_wait::GRANTED))  
  4.       {  
  5.         /*  
  6.           Satisfy the found request by updating lock structures.  
  7.           It is OK to do so even after waking up the waiter since any 
  8.           session which tries to get any information about the state of 
  9.           this lock has to acquire MDL_lock::m_rwlock first and thus,  
  10.           when manages to do so, already sees an updated state of the  
  11.           MDL_lock object.  
  12.         */  
  13.         m_waiting.remove_ticket(ticket);  
  14.         m_granted.add_ticket(ticket);  
  15.     } 

今天把mdl系統總體上看了一下,對鎖的請求、等待以及喚醒有了初步了解。并發性的問題是最難調試的,大家如果想做鎖方面的實驗,可以利用VS調試中的凍結線程的功能,這樣就可以確保并發情況控制完全按照你設計思路去呈現。

原文鏈接:http://www.cnblogs.com/nocode/archive/2011/12/15/2289507.html

責任編輯:林師授 來源: 心中無碼的博客
相關推薦

2022-03-11 09:12:06

MySQLMDL

2024-01-02 14:17:31

MySQLMDL LOCK語句

2025-05-30 02:00:00

運維腳本MDL

2022-07-20 08:06:57

MySQL表鎖Innodb

2021-02-20 06:09:46

libtask協程鎖機制

2011-08-23 13:56:12

MySQLConnection

2021-07-06 08:37:29

Redisson分布式

2021-03-26 12:07:14

JupyterPython編程語言

2021-06-30 14:56:12

Redisson分布式公平鎖

2021-07-02 08:51:09

Redisson分布式鎖公平鎖

2024-04-03 09:50:33

MySQLMDL事務

2022-08-12 15:41:11

神經網絡架構

2021-07-01 09:42:08

Redisson分布式

2024-11-29 07:38:12

MySQL數據庫

2015-01-20 17:09:21

Android源碼手勢鎖

2020-08-24 08:13:25

非公平鎖源碼

2021-07-08 09:21:17

ZooKeeper分布式鎖 Curator

2021-06-27 21:24:55

RedissonJava數據

2025-06-04 02:55:00

MySQL意向鎖記錄鎖

2021-12-26 18:21:28

MySQLAlter更新表
點贊
收藏

51CTO技術棧公眾號

日韩精品导航| 精品国产丝袜高跟鞋| 国产日韩一区二区三区在线| 国产手机视频精品| 亚洲综合在线一区二区| 国产社区精品视频| 国产精品久久久久9999吃药| 99久久自偷自偷国产精品不卡| 日本视频免费在线| 欧美肉体xxxx裸体137大胆| 日韩一区二区在线观看视频播放| 国产成人黄色片| 麻豆影视在线观看_| www..com久久爱| 成人xxxxx| 亚洲国产成人精品女人久久| 91精品国偷自产在线电影 | 国产欧美日韩综合精品一区二区 | 国产免费成人在线| 国产一二区在线观看| 久久久夜色精品亚洲| 99中文字幕| 97人妻精品一区二区三区软件 | 欧美日韩中文不卡| 麻豆mv在线观看| 一区二区久久久久久| 色婷婷精品国产一区二区三区| 亚洲国产精品二区| 美女爽到高潮91| 欧洲日本亚洲国产区| 久久久精品一区二区涩爱| 日本一区二区三区视频| 亚洲男人天堂网| 男男一级淫片免费播放| 成人噜噜噜噜| 欧美日韩电影在线播放| 婷婷丁香激情网| www.精品| 五月婷婷综合激情| 男人插女人视频在线观看| 大地资源网3页在线观看| 欧美国产亚洲另类动漫| 欧美在线一二三区| 日本一卡二卡四卡精品| 播五月开心婷婷综合| 98国产高清一区| 国产av一区二区三区精品| 久久国产乱子精品免费女| 国产成一区二区| 五月激情丁香网| 首页欧美精品中文字幕| 国产国语videosex另类| 欧美日韩一级黄色片| 一本久久综合| 欧美亚洲另类激情另类| 91美女免费看| 午夜在线a亚洲v天堂网2018| 91精品国产91久久| 欧美 日韩 精品| 一本久道久久综合婷婷鲸鱼| 555www成人网| 国产性生活视频| 日本一不卡视频| 国产欧美精品在线播放| 国产日韩一级片| 国产91精品入口| 极品日韩久久| 国产在线观看免费| 中文字幕中文乱码欧美一区二区| 日本丰满大乳奶| 污污片在线免费视频| 亚洲成人av电影在线| 欧美日韩二三区| 二吊插入一穴一区二区| 中文字幕一区二区三区乱码图片| 欧美一级片在线看| 青青草97国产精品免费观看| 日韩在线高清视频| 欧美一区免费观看| 亚洲午夜精品久久久久久app| 国内成人精品一区| 特级西西444www大精品视频免费看| 久久动漫亚洲| 国产在线拍揄自揄视频不卡99 | 亚洲七七久久综合桃花剧情介绍| 一区二区三区在线高清| 久久精品国产精品亚洲色婷婷| 性欧美1819sex性高清| 欧美日韩国产小视频在线观看| 亚洲成人av免费观看| 欧美日韩一本| 色妞一区二区三区| 日本少妇在线观看| 日韩不卡免费视频| 7777奇米亚洲综合久久| 男女av在线| 亚洲视频一区二区免费在线观看| 欧美国产综合在线| 高清成人在线| 精品国产电影一区二区| 九九九视频在线观看| 亚洲第一伊人| 国产日韩欧美中文| 亚洲欧美综合一区二区| 综合欧美亚洲日本| 久久久久久久久久久久久国产精品 | 欧美日韩在线免费观看| 亚洲妇熟xx妇色黄蜜桃| 天堂在线精品| 欧美激情一区二区久久久| 国产主播第一页| 不卡高清视频专区| av电影一区二区三区| 亚洲伊人av| 精品国产99国产精品| 情侣偷拍对白清晰饥渴难耐| 先锋亚洲精品| 国产欧美日韩卡一| 日韩精品不卡| www成人免费观看| 91精品国产综合久久久久久久久久| 欧美一区二区三区免费观看| 在线综合+亚洲+欧美中文字幕| 五月天婷婷在线观看视频| 色婷婷久久久| 欧美激情亚洲另类| 国产精品熟女久久久久久| 久久亚洲综合色一区二区三区| 成人黄色片免费| 视频91a欧美| 综合网中文字幕| 欧美一级淫片免费视频黄| 99re免费视频精品全部| www.成年人视频| 日韩在线视频一区二区三区| 久久精彩免费视频| 亚洲视频在线观看免费视频| 国产欧美精品日韩区二区麻豆天美| 精品无码一区二区三区在线| 亚洲开心激情| 九色精品免费永久在线| 99久久亚洲精品日本无码 | 欧美片在线播放| 国产精品20p| 欧美aaa在线| 性欧美大战久久久久久久免费观看 | 九九九九九九九九| 91蜜臀精品国产自偷在线| 国产精品欧美一区二区三区奶水| 黄色片在线播放| 色哟哟精品一区| 一区二区三区久久久久| 日韩电影在线一区| 亚洲精品欧洲精品| 99tv成人影院| 欧美成人黄色小视频| 亚洲黄色a级片| 午夜影院在线观看欧美| 久久无码人妻精品一区二区三区| 在线亚洲自拍| 日韩欧美精品一区二区三区经典| 一二区成人影院电影网| 色婷婷久久av| 亚洲第一黄色片| 疯狂做受xxxx高潮欧美日本 | 黄频在线免费观看| 欧美日韩国产一区在线| 少妇人妻好深好紧精品无码| 蜜臀av一级做a爰片久久| 咪咪色在线视频| 日韩一区二区三区精品| 97精品久久久中文字幕免费| 欧洲视频在线免费观看| 欧美日韩高清在线| 清纯粉嫩极品夜夜嗨av| 波多野结衣在线一区| 欧美日韩在线不卡视频| 日韩精品免费| 成人18视频| 欧洲精品一区二区三区| 久久综合伊人77777尤物| 天堂在线视频观看| 欧美无人高清视频在线观看| 九九久久免费视频| 久久久天堂av| 深夜做爰性大片蜜桃| 一区二区毛片| 一级一片免费播放| 色综合久久中文| 亚洲精品免费在线视频| 成人私拍视频| 久久亚洲精品网站| 青草久久伊人| 精品国产一二三区| 亚洲av人无码激艳猛片服务器| 夜夜嗨av一区二区三区网页| 我和岳m愉情xxxⅹ视频| 国产盗摄一区二区三区| 欧美综合在线观看视频| 国产一区二区三区四区三区四| 欧美日韩在线精品| 亚洲高清在线一区| 国产剧情日韩欧美| 涩涩视频在线| 欧美超级免费视 在线| 国产福利在线视频| 亚洲成在人线av| 国产精品久久777777换脸| 欧美日韩精品国产| 劲爆欧美第一页| 日韩一区在线播放| av黄色在线免费观看| proumb性欧美在线观看| 特级黄色片视频| 美国av一区二区| 国语对白做受xxxxx在线中国 | 玩弄japan白嫩少妇hd| 狠狠干成人综合网| 最新欧美日韩亚洲| 精品国产欧美日韩| 久久久久久久有限公司| 91精品尤物| 亚洲自拍偷拍第一页| av国产精品| 国产精品亚洲一区二区三区| 91久久国产综合久久91猫猫| 欧美精品久久久久| 亚洲婷婷噜噜| 久久亚洲精品一区二区| 色老头视频在线观看| 伊人激情综合网| 国产精品一二三区视频| 亚洲欧美中文另类| 天堂中文在线视频| 亚洲精品成人久久电影| 日本高清视频免费看| 欧美xxxx老人做受| 亚洲国产综合网| 亚洲精品在线观看视频| 亚洲不卡免费视频| 精品免费日韩av| 狠狠躁日日躁夜夜躁av| 精品国产乱码久久久久久图片 | 精品自在线视频| gogo在线观看| 欧美另类在线播放| 在线三级电影| 久久久影视精品| 欧美人与禽性xxxxx杂性| 精品中文字幕在线| 成人性生交大片免费看在线播放| 欧美日韩xxx| 888av在线视频| 51精品在线观看| 日本一区免费网站| 国产中文日韩欧美| 国产午夜久久av| 国产嫩草一区二区三区在线观看| aiai久久| 免费在线国产精品| 日韩电影在线视频| ijzzijzzij亚洲大全| 狠狠爱综合网| 丁香啪啪综合成人亚洲| 日韩高清在线一区| 在线播放av中文字幕| 国产成人亚洲精品青草天美| 动漫美女无遮挡免费| 91美女片黄在线观看| 国产午夜精品福利视频| 亚洲激情自拍视频| 国产午夜久久久| 91成人在线精品| 国产色在线视频| 日韩电影在线观看永久视频免费网站| 日色在线视频| www.日韩.com| 男人天堂视频在线观看| 国产精品久久一区主播| 一区二区精彩视频| 欧美激情www| 你懂的亚洲视频| 超碰影院在线观看| 国产精品18久久久久久久久久久久| 国产高潮在线| 日韩精品在线视频观看| 福利在线播放| 欧美老少配视频| 五月天国产在线| 国产日韩欧美日韩| 超碰成人97| 一区二区欧美日韩| 亚洲激情精品| 亚洲va在线va天堂va偷拍| 成人的网站免费观看| 五月激情四射婷婷| 五月天亚洲精品| 国产人妻精品一区二区三| 日韩精品在线免费播放| 性欧美video高清bbw| 国产成人精品一区二区| 午夜免费欧美电影| 亚洲国产一区二区精品视频 | 国产精品久久久久久免费免熟| 亚洲精品在线电影| 国产视频在线播放| 国产成人福利视频| 久久国产精品免费精品3p| 亚洲一区二区免费视频软件合集| 亚洲激情在线| 日本成人在线免费| 国产精品国产自产拍高清av | 精品日韩在线观看| 91精品大全| 国产91在线高潮白浆在线观看| 一区二区三区免费在线看| 一区二区三区在线观看www| 成人av免费在线看| www.成人在线观看| 亚洲欧洲在线观看| www555久久| 欧美日韩亚洲视频| 一级黄色小视频| 亚洲欧美日韩爽爽影院| gogo久久| 99精品国产高清一区二区| 色喇叭免费久久综合| 白嫩少妇丰满一区二区| 不卡一区二区三区四区| 曰本女人与公拘交酡| 欧美日本韩国一区| 国产98在线| 欧美中文字幕精品| 欧美亚洲国产日韩| 欧美在线一区视频| 成人黄色av电影| 国产无遮挡又黄又爽| 亚洲成人精品久久| 9765激情中文在线| 国产精品视频入口| 韩日视频一区| 岛国av免费观看| 亚洲国产日韩精品| 欧美一区二不卡视频| 久久久久久久色| 韩国女主播一区二区三区| 九九热只有这里有精品| 成人av免费观看| 亚洲视频免费播放| 国产视频丨精品|在线观看| 日韩脚交footjobhd| 免费看成人片| 日韩国产欧美视频| 综合 欧美 亚洲日本| 欧美精品一级二级| 18视频在线观看| 国产女人水真多18毛片18精品| 亚洲激情网址| 亚洲激情视频小说| 欧美视频一区二| 麻豆tv入口在线看| 成人黄动漫网站免费| 极品av少妇一区二区| 女人被狂躁c到高潮| 在线视频一区二区三| 大地资源中文在线观看免费版| 国产欧美精品一区二区三区-老狼| 婷婷综合亚洲| 国产在线a视频| 大伊人狠狠躁夜夜躁av一区| 搞黄视频免费在线观看| 国产日韩欧美在线看| 亚洲婷婷在线| 欧美激情aaa| 欧美老人xxxx18| 欧美1234区| 欧美日韩精品中文字幕一区二区| 美女免费视频一区二区| 中文字幕av免费在线观看| 亚洲国产另类久久精品| yiren22亚洲综合| 免费在线黄网站| 久久精品一区四区| jlzzjlzzjlzz亚洲人| 26uuu久久噜噜噜噜| 久久久久电影| 精品中文字幕在线播放| 欧美日韩在线免费视频| 色呦呦在线资源| 日韩中文一区| 成人一区在线观看| 亚洲精品无码久久久久| 欧美国产日韩xxxxx| 欧美久久综合网| 91丨porny丨对白| 欧美肥胖老妇做爰| 亚洲日本天堂| 日本福利视频网站| 国产精品人人做人人爽人人添| 国产成人手机在线|