這篇文章主要講解了“MySQL的鎖機(jī)制以及表的生命周期”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“MySQL的鎖機(jī)制以及表的生命周期”吧!

創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、嵐縣網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價格優(yōu)惠性價比高,為嵐縣等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
1.MySQL中并發(fā)和隔離控制機(jī)制
Meta-data元數(shù)據(jù)鎖:在table cache緩存里實(shí)現(xiàn)的,為DDL(Data Definition Language)提供隔離操作。一種特別的meta-data元數(shù)據(jù)類型,叫Name Lock。(SQL層)
表級table-level數(shù)據(jù)鎖(SQL層)
存儲引擎特有機(jī)制 -- row locks行鎖,page locks頁鎖,table locks表級,versioning版本(在引擎中實(shí)現(xiàn))
全局讀鎖 -- FLUSH TABLES WITH READ LOCK(SQL層)
2.在語句執(zhí)行中表的生命周期
DML(Data Manipulation Language)例子:
計(jì)算語句使用到的所有表
在每個表:打開open表 -- 從table cache緩存里得到TABLE對象,并在此表加上meta-data元數(shù)據(jù)鎖
等待全局讀鎖后改變數(shù)據(jù)
在每個表:鎖lock表 -- 在表加上table-level數(shù)據(jù)鎖
執(zhí)行語句:調(diào)用:handler::write_row()/read_rnd()/read_index(),等;隱式地調(diào)用引擎級engine-level鎖機(jī)制
在每個表:釋放表的數(shù)據(jù)鎖
在每個表:釋放表的DDL鎖并把表放回table cache緩存里
DDL語句也是一樣,沒有典型的執(zhí)行計(jì)劃。
3.獲取meta-data元數(shù)據(jù)鎖
meta-data元數(shù)據(jù)鎖的實(shí)現(xiàn)作為TABLE對象的一個屬性,TABLE對象代表了table cache緩存。
meta-data元數(shù)據(jù)鎖為如下任何一種:shared共享鎖 -- 隱式地加鎖,只通過標(biāo)記TABLE對象“被使用”;semi-exclusive半獨(dú)享鎖,也叫Name Lock,RENAME操作會在源表和目標(biāo)加上此鎖;exclusive獨(dú)享,也叫exclusive name lock,CREATE TABLE ... SELECT操作會在目標(biāo)表上加上此鎖,如果沒有的話。
4.表高速緩存(table cache)
是一個HASH變量,叫open_cache
TABLE對象是HASH元素
以HASH的操作被LOCK_open mutex互斥量保護(hù)
內(nèi)部結(jié)構(gòu)(The table cache: internal structure)
在緩存里,每個物理表可能被多個TABLE實(shí)例表示
相同表的所有TABLE實(shí)例,通過相連的列(a linked list)連接著
每個TABLE實(shí)例有一個table cache緩存版本的復(fù)制 -- TABLE實(shí)例保存的版本不會和當(dāng)前table cache緩存版本一致,而是保存舊的和從緩存刪除的
被某些語句使用的TABLE實(shí)例被會標(biāo)記為對其它的語句來說是無效的 -- 這就是meta-data元數(shù)據(jù)鎖的本質(zhì)
在緩存中的TABLE實(shí)例通常地有一個有效的句柄實(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í)上,一個概念/對象組合不僅用于緩存或鎖定:LOCK_open mutex互斥量也用到其它的操作,如:使磁盤上和處理中的表創(chuàng)建的原子性
典型的操作,來自隔離等級Pov的重要(注:isolation PoV沒研究出是什么意思):語句查詢時,打開和關(guān)閉表 -- shared共享鎖;強(qiáng)制和等待直到表的所有實(shí)例被關(guān)閉 -- exclusive獨(dú)享(但不完全);Name Lock -- 特殊地情況,當(dāng)手上沒有TABLE實(shí)例,只能使用一個特殊的占位符(甚至表可能不存在)。
感謝各位的閱讀,以上就是“MySQL的鎖機(jī)制以及表的生命周期”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對MySQL的鎖機(jī)制以及表的生命周期這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
文章題目:MySQL的鎖機(jī)制以及表的生命周期
文章位置:http://www.chinadenli.net/article36/iphosg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、建站公司、靜態(tài)網(wǎng)站、面包屑導(dǎo)航、網(wǎng)站策劃、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)