日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

剖析數(shù)據(jù)庫(kù)中重要而又常被曲解的概念

作者:暗諾星刻 更新時(shí)間: 2022-05-11 編程語(yǔ)言

剖析數(shù)據(jù)庫(kù)中重要而又常被曲解的概念

  • 排他鎖
  • 共享鎖
  • 意向鎖
    • 粒度樹(shù)
    • 意向鎖
  • 兩段鎖協(xié)議
  • 一級(jí)封鎖協(xié)議
  • 二級(jí)封鎖協(xié)議
  • 三級(jí)封鎖協(xié)議
  • 臟讀
  • 不可重復(fù)讀
  • 幻影行
  • 可串行化

排他鎖

  • 排他鎖(exclusive locks):指的滿足此條件的鎖:當(dāng)某事務(wù)對(duì)某數(shù)據(jù)加上排他鎖之后,直到該事務(wù)釋放這個(gè)鎖之前,其它事務(wù)不能再對(duì)這個(gè)數(shù)據(jù)再加排他鎖和共享鎖。

共享鎖

  • 共享鎖(share locks):指的滿足此條件的鎖:當(dāng)某事務(wù)對(duì)某數(shù)據(jù)加上共享鎖之后,直到所有事務(wù)都釋放了對(duì)該數(shù)據(jù)加上的共享鎖之前,任何事務(wù)都不能對(duì)該數(shù)據(jù)加上排他鎖,但可以對(duì)其加共享鎖。

【注意】

??排他鎖、共享鎖本身是無(wú)法直接限制事務(wù)對(duì)數(shù)據(jù)的讀取和修改的。之所以看起來(lái)它們能夠控制對(duì)數(shù)據(jù)的讀取和修改,這需要依賴(lài)每個(gè)事務(wù)在讀取和修改數(shù)據(jù)之前必須要遵守某種約定,這就是:如果要求在某些條件下,某事務(wù)需要加某種鎖才能對(duì)數(shù)據(jù)進(jìn)行操作,那么,所有其它事務(wù)在遇到同樣情況下,也強(qiáng)制必須先加鎖才能對(duì)數(shù)據(jù)進(jìn)行操作,如果加鎖加失敗,則該事務(wù)需要等待。而鎖之間是有排斥法則的,所以可以通過(guò)這個(gè)法則來(lái)間接實(shí)現(xiàn)對(duì)數(shù)據(jù)讀取和修改上的限制。

??排他鎖對(duì)應(yīng)的要求條件往往是在對(duì)數(shù)據(jù)的修改之前,共享鎖對(duì)應(yīng)的則是讀取。也就是說(shuō),如果對(duì)事務(wù)啟用排他鎖,往往意味著,任何事務(wù)在修改數(shù)據(jù)之前都要先加排他鎖。如果對(duì)事務(wù)啟用共享鎖,往往意味著任何事務(wù)在讀取數(shù)據(jù)之前都要先加共享鎖。不過(guò),可以自行規(guī)定加鎖時(shí)機(jī)。


意向鎖

??介紹這個(gè)概念之前,需要知道什么是粒度樹(shù)。

粒度樹(shù)

  • 粒度樹(shù):不同資源在概念上的包含關(guān)系稱(chēng)為粒度。不同資源之間的概念粒度會(huì)有不同,如行的粒度與表的粒度就有不同。一個(gè)資源可以分為粒度更小的資源。按照資源之間的包含關(guān)系所建立的樹(shù)狀結(jié)構(gòu)稱(chēng)為粒度樹(shù)。

意向鎖

  • 意向鎖:對(duì)粒度樹(shù)中的某一個(gè)結(jié)點(diǎn)加意向鎖時(shí),代表這個(gè)結(jié)點(diǎn)下至少有一個(gè)子孫結(jié)點(diǎn)將要被加上 排他鎖共享鎖


    【提示】

    ??意向鎖是為了減少對(duì)多粒度資源加 排他鎖共享鎖 時(shí)的開(kāi)銷(xiāo)。


兩段鎖協(xié)議

  • 兩段鎖(Two Phase Locking,簡(jiǎn)稱(chēng) 2PL)協(xié)議:當(dāng)一個(gè)事務(wù)需要對(duì)很多資源加鎖時(shí),如果對(duì)這些資源的加鎖順序可分為如下兩個(gè)階段,則稱(chēng)其符合兩段鎖協(xié)議:

    • 拓展階段:只進(jìn)行加鎖,不進(jìn)行釋放鎖。

    • 收縮階段:只釋放鎖,不進(jìn)行加鎖。

    如果該事務(wù)對(duì)這些資源進(jìn)行適當(dāng)分組,使得對(duì)每一組的加鎖順序都符合兩段鎖協(xié)議,則稱(chēng)該事務(wù)對(duì)整個(gè)資源的加鎖順序也符合兩段鎖協(xié)議。


    【提示】

    ??事務(wù)調(diào)度遵守兩段鎖協(xié)議時(shí),一定滿足可串行化,但遵守兩段鎖協(xié)議不是滿足可串行化的充要條件。


一級(jí)封鎖協(xié)議

  • 一級(jí)封鎖協(xié)議:規(guī)定:任何事務(wù)在修改數(shù)據(jù)之前,必須先對(duì)其加本事務(wù)結(jié)束才會(huì)釋放的排他鎖,然后在加鎖成功之后才能修改數(shù)據(jù)。

    一級(jí)封鎖協(xié)議不能防止臟讀、不可重復(fù)讀。

二級(jí)封鎖協(xié)議

  • 二級(jí)封鎖協(xié)議:規(guī)定:任何事務(wù)除了要遵守級(jí)封鎖協(xié)議之外,還應(yīng)該遵守:在讀取數(shù)據(jù)之前,

    • 如果自己已經(jīng)對(duì)該數(shù)據(jù)加上了排他鎖或共享鎖,則直接讀取數(shù)據(jù),不再額外加鎖。

    • 如果自己此時(shí)沒(méi)有對(duì)該數(shù)據(jù)加上排他鎖或共享鎖,則必須先對(duì)其加共享鎖,然后在加鎖成功之后才能讀取數(shù)據(jù),不過(guò)在讀取完數(shù)據(jù)之后就釋放共享鎖。

    二級(jí)封鎖協(xié)議不能防止不可重復(fù)讀。

三級(jí)封鎖協(xié)議

  • 三級(jí)封鎖協(xié)議:規(guī)定:任何事務(wù)除了要遵守級(jí)封鎖協(xié)議之外,還應(yīng)該遵守:在讀取數(shù)據(jù)之前,

    • 如果自己已經(jīng)對(duì)該數(shù)據(jù)加上了排他鎖或共享鎖,則直接讀取數(shù)據(jù),不再額外加鎖。

    • 如果自己此時(shí)沒(méi)有對(duì)該數(shù)據(jù)加上排他鎖或共享鎖,則必須先對(duì)其加本事務(wù)結(jié)束才會(huì)釋放的共享鎖,然后在加鎖成功之后才能讀取數(shù)據(jù)。

    三級(jí)封鎖協(xié)議可以防止臟讀、不可重復(fù)讀,但不能防止舊讀。

臟讀

  • 臟讀(dirty read):如果一個(gè)事務(wù)在讀取數(shù)據(jù)之前,讀到的是某事務(wù)在修改后、但提交之前的數(shù)據(jù),這稱(chēng)為臟讀。


    【注意】

    ??如果某事務(wù)讀取到的數(shù)據(jù)是歷史時(shí)期的某個(gè)一致性狀態(tài)下的數(shù)據(jù),這不能稱(chēng)之為 臟讀,這應(yīng)該叫做讀。臟讀 讀出來(lái)的數(shù)據(jù)是一個(gè)處于中間狀態(tài)下的數(shù)據(jù),這種數(shù)據(jù)是沒(méi)有意義的。而 舊讀 讀出來(lái)的數(shù)據(jù)是一種曾經(jīng)的正確數(shù)據(jù),使用這種數(shù)據(jù)有可能會(huì)導(dǎo)致問(wèn)題,有可能不會(huì)。


不可重復(fù)讀

  • 不可重復(fù)讀(nonrepeatable read):在上一次查詢(xún)之后,如果本事務(wù)沒(méi)有主動(dòng)變更數(shù)據(jù),當(dāng)本事務(wù)再次以相同的條件查詢(xún)數(shù)據(jù)時(shí),得到的數(shù)據(jù)與上一次不一致。(變更指更新、插入、刪除,但不包括查找)

幻影行

  • 幻影行(phantom row):對(duì)于不同的數(shù)據(jù)庫(kù),可以是以下定義之一。

    • 在上一次查詢(xún)之后,如果本事務(wù)沒(méi)有主動(dòng)變更數(shù)據(jù),當(dāng)本事務(wù)再次以相同的條件查詢(xún)數(shù)據(jù)時(shí),與上一次相比,數(shù)據(jù)的個(gè)數(shù)發(fā)生了變化。(變更指更新、插入、刪除,但不包括查找)

      在這個(gè)定義中,幻影行屬于不可重復(fù)讀的范疇。

    • 滿足以下條件之一即視為出現(xiàn)了幻影行:

      • 某事務(wù)連續(xù)以相同的條件查詢(xún)數(shù)據(jù)時(shí),查詢(xún)的結(jié)果不全相同。(連續(xù)指的是查詢(xún)操作中沒(méi)有夾雜其它操作)

      • 本次變更數(shù)據(jù)時(shí),涉及變更前的查詢(xún)中不存在的數(shù)據(jù),但此操作沒(méi)有引發(fā)異常,而是成功變更了該數(shù)據(jù)。隨后本事務(wù)再次以相同的條件查詢(xún)數(shù)據(jù)時(shí),與上一次查詢(xún)相比,數(shù)據(jù)的個(gè)數(shù)發(fā)生了變化。(變更指更新、插入、刪除,但不包括查找)

      在這個(gè)定義中,幻影行一定屬于不可重復(fù)讀。


【注意】

??不可重復(fù)讀、幻影行描述的都是同一事務(wù)的操作。

  • 如果一個(gè)事務(wù)已經(jīng)結(jié)束,然后又開(kāi)啟新的事務(wù),此時(shí)這兩個(gè)事務(wù)分別的查詢(xún)結(jié)果不能用于證明事務(wù)是否滿足不可重復(fù)讀、幻影行。

    很多情況都會(huì)導(dǎo)致事務(wù)結(jié)束,如事務(wù)的提交、回滾、執(zhí)行 DDL 語(yǔ)句、客戶端斷開(kāi)等等。

  • 同一事務(wù)要求當(dāng)前正在觀測(cè)的事務(wù)不能結(jié)束,否則該事務(wù)結(jié)束之后的操作就不能隸屬于同一事務(wù)。但這僅限于這正在被觀測(cè)的事務(wù),其它事務(wù)是可以任意開(kāi)啟、隨時(shí)結(jié)束,這不影響對(duì)同一事務(wù)的要求。


可串行化

  • 可串行化(Serializable):如果一種調(diào)度事務(wù)執(zhí)行的策略,使得每次多個(gè)事務(wù)并發(fā)執(zhí)行時(shí),其執(zhí)行結(jié)果如果屬于下面這個(gè)執(zhí)行結(jié)果集中的任何一個(gè)結(jié)果,就認(rèn)為這種調(diào)度策略滿足可串行化。

    • 任意排列這些事務(wù)的執(zhí)行次序。

    • 令這些事務(wù)依次執(zhí)行,且上一次事務(wù)執(zhí)行完,下一個(gè)事務(wù)才能執(zhí)行。

原文鏈接:https://blog.csdn.net/wangpaiblog/article/details/122780648

欄目分類(lèi)
最近更新