


詳細(xì)了解 MySQL鎖機(jī)制
詳細(xì)了解 MySQL的數(shù)據(jù)鎖機(jī)制:
1.MySQL中并發(fā)和隔離控制機(jī)制
Meta-data元數(shù)據(jù)鎖:在table cache緩存里實(shí)現(xiàn)的,為DDL(Data Definition Language)提供隔離操作。一種特別的meta-data元數(shù)據(jù)類(lèi)型,叫Name Lock。(SQL層)
表級(jí)table-level數(shù)據(jù)鎖(SQL層)
存儲(chǔ)引擎特有機(jī)制 -- row locks行鎖,page locks頁(yè)鎖,table locks表級(jí),versioning版本(在引擎中實(shí)現(xiàn))
全局讀鎖 -- FLUSH TABLES WITH READ LOCK(SQL層)
2.在語(yǔ)句執(zhí)行中表的生命周期
DML(Data Manipulation Language)例子:
計(jì)算語(yǔ)句使用到的所有表
在每個(gè)表:打開(kāi)open表 -- 從table cache緩存里得到TABLE對(duì)象,并在此表加上meta-data元數(shù)據(jù)鎖
等待全局讀鎖后改變數(shù)據(jù)
在每個(gè)表:鎖lock表 -- 在表加上table-level數(shù)據(jù)鎖
執(zhí)行語(yǔ)句:調(diào)用:handler::write_row()/read_rnd()/read_index(),等;隱式地調(diào)用引擎級(jí)engine-level鎖機(jī)制
在每個(gè)表:釋放表的數(shù)據(jù)鎖
在每個(gè)表:釋放表的DDL鎖并把表放回table cache緩存里
DDL語(yǔ)句也是一樣,沒(méi)有典型的執(zhí)行計(jì)劃。
3.獲取meta-data元數(shù)據(jù)鎖
meta-data元數(shù)據(jù)鎖的實(shí)現(xiàn)作為T(mén)ABLE對(duì)象的一個(gè)屬性,TABLE對(duì)象代表了table cache緩存。
meta-data元數(shù)據(jù)鎖為如下任何一種:shared共享鎖 -- 隱式地加鎖,只通過(guò)標(biāo)記TABLE對(duì)象“被使用”;semi-exclusive半獨(dú)享鎖,也叫Name Lock,RENAME操作會(huì)在源表和目標(biāo)加上此鎖;exclusive獨(dú)享,也叫exclusive name lock,CREATE TABLE ... SELECT操作會(huì)在目標(biāo)表上加上此鎖,如果沒(méi)有的話(huà)。
4.表高速緩存(table cache)
是一個(gè)HASH變量,叫open_cache
TABLE對(duì)象是HASH元素
以HASH的操作被LOCK_open mutex互斥量保護(hù)
內(nèi)部結(jié)構(gòu)(The table cache: internal structure)
在緩存里,每個(gè)物理表可能被多個(gè)TABLE實(shí)例表示
相同表的所有TABLE實(shí)例,通過(guò)相連的列(a linked list)連接著
每個(gè)TABLE實(shí)例有一個(gè)table cache緩存版本的復(fù)制 -- TABLE實(shí)例保存的版本不會(huì)和當(dāng)前table cache緩存版本一致,而是保存舊的和從緩存刪除的
被某些語(yǔ)句使用的TABLE實(shí)例被會(huì)標(biāo)記為對(duì)其它的語(yǔ)句來(lái)說(shuō)是無(wú)效的 -- 這就是meta-data元數(shù)據(jù)鎖的本質(zhì)
在緩存中的TABLE實(shí)例通常地有一個(gè)有效的句柄實(shí)例連接著它
內(nèi)部運(yùn)算(The table cache: operations)
主要的代碼在:sql/sql_base.cc,sql/lock.cc,sql/table.h,sql/sql_table.cc
主要的方法:open_table(),close_thread_tables(),close_cached_table(),lock_table_names()
事實(shí)上,一個(gè)概念/對(duì)象組合不僅用于緩存或鎖定:LOCK_open mutex互斥量也用到其它的操作,如:使磁盤(pán)上和處理中的表創(chuàng)建的原子性
典型的操作,來(lái)自隔離等級(jí)Pov的重要(注:isolation PoV沒(méi)研究出是什么意思):語(yǔ)句查詢(xún)時(shí),打開(kāi)和關(guān)閉表 -- shared共享鎖;強(qiáng)制和等待直到表的所有實(shí)例被關(guān)閉 -- exclusive獨(dú)享(但不完全);Name Lock -- 特殊地情況,當(dāng)手上沒(méi)有TABLE實(shí)例,只能使用一個(gè)特殊的占位符(甚至表可能不存在)。
關(guān)鍵字:MySQL、數(shù)據(jù)
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶(hù)
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶(hù)的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無(wú)AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解