亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

詳細了解 MySQL鎖機制

添加時間:2014-3-15 16:37:19  添加: 思海網絡 

 詳細了解 MySQL的數據鎖機制: 

    1.MySQL中并發和隔離控制機制

  Meta-data元數據鎖:在table cache緩存里實現的,為DDL(Data Definition Language)提供隔離操作。一種特別的meta-data元數據類型,叫Name Lock。(SQL層)

  表級table-level數據鎖(SQL層)

  存儲引擎特有機制 -- row locks行鎖,page locks頁鎖,table locks表級,versioning版本(在引擎中實現)

  全局讀鎖 -- FLUSH TABLES WITH READ LOCK(SQL層)

  2.在語句執行中表的生命周期

  DML(Data Manipulation Language)例子:

  計算語句使用到的所有表

  在每個表:打開open表 -- 從table cache緩存里得到TABLE對象,并在此表加上meta-data元數據鎖

  等待全局讀鎖后改變數據

  在每個表:鎖lock表 -- 在表加上table-level數據鎖

  執行語句:調用:handler::write_row()/read_rnd()/read_index(),等;隱式地調用引擎級engine-level鎖機制

  在每個表:釋放表的數據鎖

  在每個表:釋放表的DDL鎖并把表放回table cache緩存里

  DDL語句也是一樣,沒有典型的執行計劃。

  3.獲取meta-data元數據鎖

  meta-data元數據鎖的實現作為TABLE對象的一個屬性,TABLE對象代表了table cache緩存。

  meta-data元數據鎖為如下任何一種:shared共享鎖 -- 隱式地加鎖,只通過標記TABLE對象“被使用”;semi-exclusive半獨享鎖,也叫Name Lock,RENAME操作會在源表和目標加上此鎖;exclusive獨享,也叫exclusive name lock,CREATE TABLE ... SELECT操作會在目標表上加上此鎖,如果沒有的話。

  4.表高速緩存(table cache)

  是一個HASH變量,叫open_cache

  TABLE對象是HASH元素

  以HASH的操作被LOCK_open mutex互斥量保護

  內部結構(The table cache: internal structure)

  在緩存里,每個物理表可能被多個TABLE實例表示

  相同表的所有TABLE實例,通過相連的列(a linked list)連接著

  每個TABLE實例有一個table cache緩存版本的復制 -- TABLE實例保存的版本不會和當前table cache緩存版本一致,而是保存舊的和從緩存刪除的

  被某些語句使用的TABLE實例被會標記為對其它的語句來說是無效的 -- 這就是meta-data元數據鎖的本質

  在緩存中的TABLE實例通常地有一個有效的句柄實例連接著它

  內部運算(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()

  事實上,一個概念/對象組合不僅用于緩存或鎖定:LOCK_open mutex互斥量也用到其它的操作,如:使磁盤上和處理中的表創建的原子性

  典型的操作,來自隔離等級Pov的重要(注:isolation PoV沒研究出是什么意思):語句查詢時,打開和關閉表 -- shared共享鎖;強制和等待直到表的所有實例被關閉 -- exclusive獨享(但不完全);Name Lock -- 特殊地情況,當手上沒有TABLE實例,只能使用一個特殊的占位符(甚至表可能不存在)。

關鍵字:MySQL、數據

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站