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

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

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

    neverend的日志

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

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      62 Posts :: 1 Stories :: 17 Comments :: 0 Trackbacks

    2012年3月31日 #

    在事務(wù)隔離級別設(shè)定為repeatable read的情況下,一般的select語句采取的是一致性非阻塞讀的方式。
    一致性是指在事務(wù)的范圍內(nèi)讀取的數(shù)據(jù)是可重現(xiàn)的,不會出現(xiàn)不可重復(fù)讀的情況。非阻塞是指這種讀取數(shù)據(jù)的模式不會對數(shù)據(jù)上任何一種鎖,其它操作全都不會被阻塞。
    在這種模式下,事務(wù)執(zhí)行讀取語句后,相關(guān)的數(shù)據(jù)會有一套副本出現(xiàn),并會為這個數(shù)據(jù)副本附加一個時間戳,其它事務(wù)在這個時間戳之后執(zhí)行的寫操作都不會反映到這個副本中,這種機(jī)制被稱之為多版本并發(fā)控制。
    如果用select …… lock in share mode,則不是一致性非阻塞讀,該語句會等待其它事務(wù)的寫語句提交或回滾之后再讀取數(shù)據(jù);如果事務(wù)隔離級別設(shè)置為read committed,也不是一致性非阻塞讀,該語句會讀取其它事務(wù)提交的數(shù)據(jù)。
    posted @ 2012-04-05 11:25 neverend 閱讀(1877) | 評論 (0)編輯 收藏

    介紹下對于Mysql鎖機(jī)制的理解
    從基本概念開始:
    共享鎖
    共享鎖的代號是S,是Share的縮寫,共享鎖的鎖粒度是行或者元組(多個行)。一個事務(wù)獲取了共享鎖之后,可以對鎖定范圍內(nèi)的數(shù)據(jù)執(zhí)行讀操作。

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

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

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

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

    上面提到的共享鎖、排它鎖、意向共享鎖、意向排它鎖相互之前都是有兼容/互斥關(guān)系的,可以用一個兼容性矩陣表示(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的相互關(guān)系在上文中解釋過了,IX和IS的相互關(guān)系全部是兼容,這也很好理解,因為它們都只是“有意”,還處于YY階段,沒有真干,所以是可以兼容的;
    剩下的就是X和IX,X和IS, S和IX, S和IS的關(guān)系了,我們可以由X和S的關(guān)系推導(dǎo)出這四組關(guān)系。
    簡單的說:X和IX的=X和X的關(guān)系。為什么呢?因為事務(wù)在獲取IX鎖后,接下來就有權(quán)利獲取X鎖。如果X和IX兼容的話,就會出現(xiàn)兩個事務(wù)都獲取了X鎖的情況,這與我們已知的X與X互斥是矛盾的,所以X與IX只能是互斥關(guān)系。其余的三組關(guān)系同理,可用同樣的方式推導(dǎo)出來。

    一致性非阻塞讀

    select... lock in share mode和select ... for update的區(qū)別

    索引記錄鎖
    間隙鎖
    后碼鎖

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


    死鎖情境分析

    MVCC的理論與實現(xiàn)
    posted @ 2012-03-31 14:53 neverend| 編輯 收藏

    主站蜘蛛池模板: 亚洲国产精品免费观看| 亚洲AV成人片色在线观看高潮| 亚洲中文字幕AV在天堂| 国产精品久久久久久久久免费| 亚洲综合无码一区二区| 8090在线观看免费观看| 久久久久亚洲AV无码专区体验| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 亚洲黄色免费观看| 99视频在线免费| 亚洲一级毛片免费在线观看| 久久笫一福利免费导航| 国产精品高清视亚洲一区二区| 女人18毛片特级一级免费视频 | 中国亚洲女人69内射少妇| a级午夜毛片免费一区二区| 久久亚洲一区二区| www视频免费看| 中文有码亚洲制服av片| 免费国内精品久久久久影院| 国产乱子伦精品免费视频| 久久精品亚洲日本佐佐木明希| 2020因为爱你带字幕免费观看全集 | 30岁的女人韩剧免费观看| 亚洲人成欧美中文字幕| 亚洲精品视频久久久| 久久久久久国产精品免费免费男同| 亚洲免费在线观看视频| 又色又污又黄无遮挡的免费视| 免费在线观影网站| 亚洲一本之道高清乱码| 男人的天堂亚洲一区二区三区| 西西人体大胆免费视频| 亚洲国产精品久久| 国产精品无码一区二区三区免费| 国产男女爽爽爽免费视频| 亚洲国产高清美女在线观看 | 91青青青国产在观免费影视| 亚洲伊人久久大香线蕉AV| 三上悠亚亚洲一区高清| 中国在线观看免费国语版|