<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    neverend的日志

    不記錄,終將被遺忘。 一萬年太久,只爭朝夕。 他們用數字構建了整個世界。

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      62 Posts :: 1 Stories :: 17 Comments :: 0 Trackbacks
    介紹下對于Mysql鎖機制的理解
    從基本概念開始:
    共享鎖
    共享鎖的代號是S,是Share的縮寫,共享鎖的鎖粒度是行或者元組(多個行)。一個事務獲取了共享鎖之后,可以對鎖定范圍內的數據執行讀操作。

    排它鎖
    排它鎖的代號是X,是eXclusive的縮寫,排它鎖的粒度與共享鎖相同,也是行或者元組。一個事務獲取了排它鎖之后,可以對鎖定范圍內的數據執行寫操作。

    假設有兩個事務t1和t2
    如果事務t1獲取了一個元組的共享鎖,事務t2還可以立即獲取這個元組的共享鎖,但不能立即獲取這個元組的排它鎖(必須等到t1釋放共享鎖之后)。
    如果事務t1獲取了一個元組的排它鎖,事務t2不能立即獲取這個元組的排共享鎖,也不能立即獲取這個元組的排它鎖(必須等到t1釋放排它鎖之后)。
     
    意向鎖
    意向鎖是一種表鎖,鎖定的粒度是整張表,分為意向共享鎖(IS)和意向排它鎖(IX)兩類。意向共享鎖表示一個事務有意對數據上共享鎖或者排它鎖。“有意”這兩個字表達的意思比較微妙,說的明白點就是指事務想干這個事但還沒真去干。舉例說明下意向共享鎖,比如一個事務t執行了這樣一個語句:select * from table lock in share model ,如果這個語句執行成功,就對表table上了一個意向共享鎖。lock in share model就是說事務t1在接下來要執行的語句中要獲取S鎖。如果t1的select * from table lock in share model執行成功,那么接下來t1應該可以暢通無阻的去執行只需要共享鎖的語句了。意向排它鎖的含義同理可知,上例中要獲取意向排它鎖,可以使用select * from table for update

    lock in share model 和 for update這兩個東西在數據率理論中還有個學名叫悲觀鎖,與悲觀鎖相對的當然還有樂觀鎖。大家可以看到各種鎖都是成雙成對出現的。關于悲觀鎖和樂觀鎖的問題暫且不表,下文再來詳述。

    鎖的互斥與兼容關系
    鎖和鎖之間的關系,要么是相容的,要么是互斥的。
    鎖a和鎖b相容是指:操作同樣一組數據時,如果事務t1獲取了鎖a,另一個事務t2還可以獲取鎖b;
    鎖a和鎖b互斥是指:操作同樣一組數據時,如果事務t1獲取了鎖a,另一個事務t2在t1釋放鎖a之前無法獲取鎖b。

    上面提到的共享鎖、排它鎖、意向共享鎖、意向排它鎖相互之前都是有兼容/互斥關系的,可以用一個兼容性矩陣表示(y表示兼容,n表示不兼容):
        X    S    IX    IS
    X  n     n    n     n
    S  n     y    n     y
    IX n     n    y     y
    IS n     y    y     y 

    兼容性矩陣為什么是這個樣子的?
    X和S的相互關系在上文中解釋過了,IX和IS的相互關系全部是兼容,這也很好理解,因為它們都只是“有意”,還處于YY階段,沒有真干,所以是可以兼容的;
    剩下的就是X和IX,X和IS, S和IX, S和IS的關系了,我們可以由X和S的關系推導出這四組關系。
    簡單的說:X和IX的=X和X的關系。為什么呢?因為事務在獲取IX鎖后,接下來就有權利獲取X鎖。如果X和IX兼容的話,就會出現兩個事務都獲取了X鎖的情況,這與我們已知的X與X互斥是矛盾的,所以X與IX只能是互斥關系。其余的三組關系同理,可用同樣的方式推導出來。

    一致性非阻塞讀

    select... lock in share mode和select ... for update的區別

    索引記錄鎖
    間隙鎖
    后碼鎖

    各種語句對應的鎖類型
    在有索引的情況下是以后碼鎖為基礎的行級鎖,在固定索引鍵查找的情況下是索引記錄鎖,在沒有可用索引的情況下上升到表鎖
    有索引的情況:
    select ... from 一致性非阻塞讀,不上鎖。在serializable隔離級別下例外,在這個隔離級別下上共享后碼鎖
    select ... from ... lock in share mode  共享后碼鎖
    select ... from ... for update 排它后碼鎖
    update .... where  排它后碼鎖
    delete from .... where 排它后碼鎖
    insert ... 排它索引記錄鎖,如果發生鍵值唯一性沖突則轉成共享鎖
    insert ... on duplicate key update ,一直都是排它鎖
    replace ... 一直都是排它鎖


    死鎖情境分析

    MVCC的理論與實現
    posted on 2012-03-31 14:53 neverend 閱讀(12006) 評論(0)  編輯  收藏
    主站蜘蛛池模板: 男人的天堂亚洲一区二区三区 | 免费黄网站在线看| 亚洲国产香蕉人人爽成AV片久久 | 中字幕视频在线永久在线观看免费| 亚洲成人在线电影| 免费成人在线视频观看| 国产亚洲精品一品区99热| 中文字幕无线码免费人妻| 亚洲欧洲美洲无码精品VA| a级毛片毛片免费观看永久| 亚洲精品无码专区在线在线播放| 国产99久久久国产精免费| 伊伊人成亚洲综合人网7777| a级片免费观看视频| 久久亚洲精品无码aⅴ大香| 99爱在线精品免费观看| 亚洲视频无码高清在线| 国产又大又粗又硬又长免费| 狠狠综合亚洲综合亚洲色| 亚洲精品第一国产综合境外资源 | 国产∨亚洲V天堂无码久久久| 两性色午夜视频免费播放| 亚洲第一中文字幕| 97视频免费在线| 老子影院午夜伦不卡亚洲| 在线观看亚洲av每日更新| 57pao一国产成永久免费| 亚洲中文字幕AV在天堂| 在线a亚洲v天堂网2018| 成人片黄网站色大片免费观看cn| 亚洲AV无码一区二区乱子伦| 亚洲国产精品免费在线观看| 亚洲色大成网站www尤物| 亚洲一区无码精品色| 99在线热视频只有精品免费| 亚洲国产美女精品久久久| 精品国产亚洲一区二区在线观看| 美丽姑娘免费观看在线观看中文版| 亚洲国产人成在线观看| 亚洲无码高清在线观看| 鲁大师在线影院免费观看|