国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 數(shù)據(jù)庫 mysql教程 事務(wù)和并發(fā)控制:DBMS

事務(wù)和并發(fā)控制:DBMS

Jan 05, 2025 pm 04:07 PM

Transactions and Concurrency Controls: DBMS

數(shù)據(jù)庫管理系統(tǒng) (DBMS) 中的事務(wù)

定義:

數(shù)據(jù)庫管理系統(tǒng) (DBMS) 中的事務(wù)是作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。事務(wù)可以涉及讀取、插入、更新或刪除數(shù)據(jù)庫中的數(shù)據(jù)。事務(wù)的關(guān)鍵特征是它是原子的,這意味著事務(wù)中的所有操作都成功完成,或者根本沒有任何操作應(yīng)用于數(shù)據(jù)庫。


事務(wù)的關(guān)鍵屬性:ACID 屬性

事務(wù)必須遵守ACID屬性以確保數(shù)據(jù)庫的一致性和可靠性。這些屬性是:

  1. 原子性

    • 原子性確保事務(wù)被視為單個(gè)、不可分割的工作單元。要么執(zhí)行事務(wù)中的所有操作,要么不執(zhí)行。如果事務(wù)的任何部分失敗,整個(gè)事務(wù)將回滾,確保數(shù)據(jù)庫保持一致的狀態(tài)。
    • 示例:如果一筆交易涉及從賬戶 A 向賬戶 B 轉(zhuǎn)賬,原子性可確保整個(gè)轉(zhuǎn)賬完成(從 A 扣除資金并添加到 B)或不執(zhí)行任何操作(不轉(zhuǎn)賬)如果失?。?。
  2. 一致性

    • 一致性確保事務(wù)將數(shù)據(jù)庫從一種有效狀態(tài)轉(zhuǎn)移到另一種有效狀態(tài)。任何事務(wù)都不應(yīng)該違反數(shù)據(jù)庫的完整性約束(例如主鍵、外鍵等)。事務(wù)提交后,數(shù)據(jù)庫應(yīng)該始終處于一致狀態(tài)。
    • 示例:在兩個(gè)銀行帳戶之間轉(zhuǎn)賬后,兩個(gè)帳戶中的余額總和應(yīng)保持不變。如果違反數(shù)據(jù)庫一致性規(guī)則,事務(wù)將會(huì)回滾。
  3. 隔離

    • 隔離性確保事務(wù)的操作在執(zhí)行時(shí)對(duì)其他事務(wù)隱藏。即使多個(gè)事務(wù)同時(shí)發(fā)生,每個(gè)事務(wù)也應(yīng)該不知道其他事務(wù)的操作。這可以防止臟讀、不可重復(fù)讀和幻讀。
    • 示例:如果兩個(gè)用戶同時(shí)從同一個(gè)銀行賬戶轉(zhuǎn)賬,隔離可確保一筆交易不會(huì)干擾另一筆交易,從而防止重復(fù)提款等錯(cuò)誤。
  4. 耐用性

    • 持久性保證一旦事務(wù)提交,其更改就是永久性的,即使在系統(tǒng)崩潰的情況下也是如此。成功提交后,事務(wù)所做的更改將保存到數(shù)據(jù)庫中,并且不會(huì)丟失。
    • 示例:如果用戶成功下訂單,數(shù)據(jù)庫中的更改(例如庫存更新和下訂單)應(yīng)該持續(xù)存在,即使提交后突然斷電也是如此。

交易類型

  1. 簡(jiǎn)單交易

    • 這些涉及單個(gè)操作,例如讀取或?qū)懭霐?shù)據(jù)。例如,簡(jiǎn)單的讀取查詢或更新查詢可以是事務(wù)的一部分。
  2. 復(fù)雜交易

    • 這些涉及多種操作,包括讀取、更新、插入和刪除。復(fù)雜的交易可以是旨在完成業(yè)務(wù)流程的一系列操作,例如將資金從一個(gè)帳戶轉(zhuǎn)移到另一個(gè)帳戶,其中涉及檢查帳戶余額、從一個(gè)帳戶中扣除以及向另一個(gè)帳戶中添加。

交易生命周期

典型的交易遵循以下步驟:

  1. 開始交易

    • 這標(biāo)志著交易的開始。表示即將執(zhí)行新的交易。
  2. 執(zhí)行操作

    • 事務(wù)執(zhí)行一系列數(shù)據(jù)庫操作,例如選擇、插入、更新或刪除記錄。這些操作作為事務(wù)的一部分按順序執(zhí)行。
  3. 提交交易

    • 所有操作完成后,事務(wù)提交。這意味著事務(wù)所做的所有更改都將永久保存到數(shù)據(jù)庫中。一旦提交,事務(wù)就無法回滾。
  4. 回滾事務(wù)

    • 如果事務(wù)執(zhí)行過程中出現(xiàn)錯(cuò)誤或失敗(例如違反約束),事務(wù)將被回滾。這意味著事務(wù)所做的所有更改都將被撤消,并且數(shù)據(jù)庫將返回到其原始狀態(tài)。
  5. 結(jié)束交易

    • 提交或回滾后,事務(wù)結(jié)束。這意味著交易的生命周期已經(jīng)完成。

交易狀態(tài)

交易在其生命周期內(nèi)必須處于以下狀態(tài)之一:

  1. 活躍

    • 交易的初始狀態(tài)。事務(wù)在執(zhí)行和執(zhí)行操作時(shí)保持此狀態(tài)。
  2. 部分承諾

    • 此狀態(tài)發(fā)生在事務(wù)的最終語句執(zhí)行之后。至此,事務(wù)已完成所有操作,但尚未提交到數(shù)據(jù)庫。
  3. 失敗

    • 當(dāng)發(fā)現(xiàn)交易無法正常執(zhí)行時(shí),它會(huì)進(jìn)入失敗狀態(tài),通常是由于約束沖突或系統(tǒng)故障等問題。
  4. 已中止

    • 事務(wù)回滾并且數(shù)據(jù)庫恢復(fù)到事務(wù)開始之前的狀態(tài)后,進(jìn)入中止狀態(tài)。
  5. 承諾

    • 事務(wù)在所有操作成功完成后進(jìn)入已提交狀態(tài),并且其更改已永久應(yīng)用到數(shù)據(jù)庫。
  6. 終止

    • 如果事務(wù)已提交或中止,則該事務(wù)被視為已終止。一旦事務(wù)達(dá)到已提交或已中止?fàn)顟B(tài),就無法重新啟動(dòng)。

DBMS 中的時(shí)間表

schedule 是按特定順序執(zhí)行的多個(gè)事務(wù)的操作序列。調(diào)度決定了多個(gè)事務(wù)的讀寫操作的執(zhí)行順序。主要目標(biāo)是確定并發(fā)事務(wù)如何交互并確保數(shù)據(jù)庫保持一致狀態(tài)。

時(shí)間表可以是連續(xù)非連續(xù)。


時(shí)間表的類型

  1. 連續(xù)劇時(shí)間表
    • 串行計(jì)劃是一種交易一個(gè)接著一個(gè)執(zhí)行而沒有任何交錯(cuò)的計(jì)劃。這意味著一個(gè)事務(wù)的操作在下一個(gè)事務(wù)開始之前完全完成。
    • 在串行調(diào)度中,沒有并發(fā)性,調(diào)度相當(dāng)于順序執(zhí)行事務(wù)。

串行時(shí)間表示例

  • 交易1:T1:讀?。ˋ);寫(A);犯罪
  • 交易2:T2:讀(B);寫(B);犯罪
  • 交易是依次執(zhí)行的,操作上沒有重疊。
  1. 非連續(xù)劇時(shí)間表
    • 非串行調(diào)度允許多個(gè)事務(wù)的操作交錯(cuò)。在這種類型的調(diào)度中,事務(wù)是并發(fā)執(zhí)行的,這意味著它們的操作混合在一起。
    • 非串行調(diào)度可能會(huì)導(dǎo)致不同的結(jié)果,具體取決于操作執(zhí)行的順序,這需要仔細(xì)管理以維護(hù) ACID 屬性。

非連續(xù)劇時(shí)間表示例

  • T1:閱讀(A);寫(A);
  • T2:讀?。˙);寫(B);
  • T1:提交;
  • T2:提交;
  • 事務(wù)T1和T2的操作是交錯(cuò)的。

可串行化

可串行性是確保并發(fā)執(zhí)行多個(gè)事務(wù)的結(jié)果與串行執(zhí)行事務(wù)(一個(gè)接一個(gè))的結(jié)果相同的概念。如果一個(gè)調(diào)度在對(duì)數(shù)據(jù)庫的影響方面等同于串行調(diào)度,則該調(diào)度被稱為可序列化。

重要性

可串行化的目標(biāo)是確保并發(fā)事務(wù)不會(huì)導(dǎo)致沖突或異常(例如臟讀、丟失更新等)并且數(shù)據(jù)庫保持一致的狀態(tài)。

可序列化有兩種主要類型:

  1. 可串行化沖突
    • 如果一個(gè)調(diào)度可以通過交換非沖突操作轉(zhuǎn)換為串行調(diào)度,那么它就是沖突可串行化的。如果兩個(gè)操作來自不同的事務(wù),訪問相同的數(shù)據(jù)項(xiàng),并且其中至少一個(gè)是寫操作,則認(rèn)為它們是沖突的。
    • 沖突操作
      • 當(dāng)一個(gè)事務(wù)讀取另一事務(wù)寫入的數(shù)據(jù)項(xiàng)時(shí),會(huì)發(fā)生讀寫沖突。
      • 當(dāng)兩個(gè)事務(wù)都寫入同一個(gè)數(shù)據(jù)項(xiàng)時(shí),就會(huì)發(fā)生寫-寫沖突。

可串行化沖突示例:

  • 時(shí)間表:
    • T1:寫入(A);
    • T2:寫入(B);
    • T1:讀?。˙);
    • T2:閱讀(A);
  • 此調(diào)度可以重新排列為串行調(diào)度,并且可以沖突串行化。
  1. 查看可序列化性
    • 如果調(diào)度在最終結(jié)果方面等同于串行調(diào)度,即發(fā)生相同的讀取和寫入,并且事務(wù)被正確序列化,則該調(diào)度是視圖可串行化的。然而,在視圖可序列化性中,操作不一定必須像沖突可序列化性中那樣交換。

沖突等價(jià)、沖突可序列化

  • 等效沖突

    • 如果兩個(gè)調(diào)度包含相同的操作,操作的順序相同,并且保留沖突操作的順序,則稱它們是沖突等效。這意味著兩個(gè)計(jì)劃中的事務(wù)交錯(cuò)會(huì)產(chǎn)生相同的結(jié)果,確保它們是沖突等價(jià)的。
  • 可序列化沖突

    • 如果一個(gè)調(diào)度表的事務(wù)可以重新排列以形成一個(gè)串行調(diào)度表,從而保持沖突順序,那么該調(diào)度表就是沖突可序列化的。簡(jiǎn)單來說,如果事務(wù)可以在不違反數(shù)據(jù)一致性的情況下序列化,即保持沖突操作的順序,則調(diào)度是沖突可序列化的。

沖突可串行性和沖突等效計(jì)劃示例

讓我們考慮以下交易及其操作:

  • 交易T1:讀取(A);寫(A);犯罪
  • 交易T2:讀取(A);寫(A);犯罪

時(shí)間表1

T1: Read(A);
T2: Read(A);
T1: Write(A);
T2: Write(A);
T1: Commit;
T2: Commit;

時(shí)間表2

T2: Read(A);
T1: Read(A);
T2: Write(A);
T1: Write(A);
T1: Commit;
T2: Commit;

沖突可串行性檢查

  • 時(shí)間表 1時(shí)間表 2沖突等效,因?yàn)闆_突操作(在 A 上讀/寫)的順序保持不變。兩個(gè)調(diào)度都可以轉(zhuǎn)換為串行調(diào)度:
    • T1:閱讀(A);寫(A);承諾;
    • T2:閱讀(A);寫(A);承諾;
  • 因此,兩個(gè)調(diào)度都是可序列化沖突。

事務(wù)隔離性和原子性

除了事務(wù)的基本屬性(例如 ACID 屬性)之外,管理事務(wù)失敗是維護(hù)數(shù)據(jù)庫一致性和可靠性的一個(gè)重要方面。當(dāng)事務(wù)并發(fā)執(zhí)行時(shí),數(shù)據(jù)庫必須確保事務(wù)期間的任何失敗都不會(huì)破壞數(shù)據(jù)庫狀態(tài),并保持?jǐn)?shù)據(jù)庫的原子性和一致性。本節(jié)討論故障處理如何影響 DBMS 中的事務(wù)隔離和原子性。


原子性和故障處理

原子性 是事務(wù)的屬性,可確保將其視為單個(gè)不可分割的工作單元。這意味著事務(wù)要么完全完成,要么根本不執(zhí)行。如果事務(wù)的任何部分失敗,則必須回滾整個(gè)事務(wù),以確保不會(huì)將部分更改應(yīng)用于數(shù)據(jù)庫。

當(dāng)事務(wù)失敗時(shí),它對(duì)數(shù)據(jù)庫可能產(chǎn)生的任何影響都必須撤消,以便數(shù)據(jù)庫可以返回到事務(wù)開始之前的狀態(tài)。在允許并發(fā)執(zhí)行事務(wù)的系統(tǒng)中,如果事務(wù) T1 失敗,則所有依賴于 T1 的事務(wù)(即,讀取或?qū)懭胧?T1 影響的數(shù)據(jù)的任何事務(wù) T2)也必須中止,以保留數(shù)據(jù)庫的原子性。如果一個(gè)事務(wù)依賴于另一個(gè)失敗的事務(wù),它不應(yīng)該留下部分更改或不一致的數(shù)據(jù)。

為了防止事務(wù)執(zhí)行期間出現(xiàn)不一致,管理規(guī)定事務(wù)操作順序的時(shí)間表至關(guān)重要,尤其是當(dāng)事務(wù)失敗時(shí)。需要限制某些類型的計(jì)劃,以確保能夠正確管理故障。


可恢復(fù)的時(shí)間表

可恢復(fù)調(diào)度 是一種事務(wù) T2 僅在其依賴的事務(wù) T1 提交后才提交的調(diào)度。簡(jiǎn)單來說,如果事務(wù) T2 讀取事務(wù) T1 寫入的數(shù)據(jù),則 T1 必須在 T2 之前提交。這確保 T2 不會(huì)基于未提交的事務(wù)提交更改,從而防止回滾 T1 也需要回滾 T2 的情況。

違反此規(guī)則的計(jì)劃稱為不可恢復(fù)的計(jì)劃。例如,如果T2在讀取T1寫入的數(shù)據(jù)后提交,但T1失敗并回滾,則數(shù)據(jù)庫無法恢復(fù)到一致狀態(tài),因?yàn)門2的提交依賴于T1未提交的更改。在這種情況下,T2 就無法撤銷,從而導(dǎo)致數(shù)據(jù)不一致。

不可恢復(fù)的時(shí)間表示例
在不可恢復(fù)的時(shí)間表中,假設(shè):

  • 事務(wù) T6 將數(shù)據(jù)寫入項(xiàng)目 A。
  • 事務(wù)T7讀取T6寫入的A的值并立即提交。

如果 T6 在提交之前失敗,T7 依賴于 T6 所做的未提交的更改。由于T7已經(jīng)提交,我們無法回滾T7,從而導(dǎo)致無法從T6的故障中恢復(fù)的情況。這會(huì)導(dǎo)致不可恢復(fù)的時(shí)間表。

為了使調(diào)度可恢復(fù),T7 應(yīng)該將其提交延遲到 T6 提交之后,確保 T7 不依賴于 T6 中未提交的數(shù)據(jù)。


無級(jí)聯(lián)時(shí)間表

即使計(jì)劃是可恢復(fù)的,它仍然可能導(dǎo)致事務(wù)失敗恢復(fù)期間出現(xiàn)問題,特別是在發(fā)生級(jí)聯(lián)回滾時(shí)。 級(jí)聯(lián)回滾是指一個(gè)事務(wù)的失敗導(dǎo)致其他依賴事務(wù)回滾的連鎖反應(yīng)。當(dāng)事務(wù)讀取另一個(gè)未提交事務(wù)寫入的數(shù)據(jù)時(shí),就會(huì)發(fā)生這種情況。

例如,考慮以下場(chǎng)景:

  • 事務(wù) T8 將值寫入數(shù)據(jù)項(xiàng) A,該值由事務(wù) T9 讀取。
  • 事務(wù) T9 將一個(gè)值寫入 A,然后由事務(wù) T10 讀取該值。
  • 如果T8失敗,依賴于T8的T9也需要回滾。 T10依賴于T9,也必須回滾。這會(huì)產(chǎn)生級(jí)聯(lián)回滾效應(yīng),不必要地撤消多個(gè)事務(wù)的工作。

級(jí)聯(lián)回滾是不可取的,因?yàn)樗鼈儠?huì)導(dǎo)致大量工作的撤銷,即使只有一個(gè)事務(wù)失敗。為了防止級(jí)聯(lián)回滾,我們可以使用級(jí)聯(lián)調(diào)度。無級(jí)聯(lián)調(diào)度是一種事務(wù)不讀取尚未提交的事務(wù)寫入的數(shù)據(jù)的調(diào)度。

形式上,級(jí)聯(lián)調(diào)度是這樣一種調(diào)度,對(duì)于任意兩個(gè)事務(wù)T1和T2,如果T2讀取T1寫入的數(shù)據(jù)項(xiàng),則T1必須在T2讀取數(shù)據(jù)項(xiàng)之前提交。這確保沒有事務(wù)可以依賴于未提交的數(shù)據(jù),并且不會(huì)出現(xiàn)級(jí)聯(lián)回滾。

每個(gè)無級(jí)聯(lián)調(diào)度也是一個(gè)可恢復(fù)調(diào)度。這意味著無級(jí)聯(lián)調(diào)度不僅可以防止級(jí)聯(lián)回滾,還可以確保數(shù)據(jù)庫在事務(wù)失敗時(shí)能夠正確恢復(fù)。

無級(jí)聯(lián)調(diào)度示例
考慮以下幾點(diǎn):

  • 事務(wù)T8寫入A,T9讀取A。
  • 在級(jí)聯(lián)調(diào)度中,T9 只能在 T8 提交后讀取 A。

這保證了除非 T8 成功完成,否則 T9 不會(huì)從 T8 讀取數(shù)據(jù),從而確保在 T8 失敗時(shí)不需要回滾 T9。


事務(wù)隔離級(jí)別

事務(wù)隔離確保并發(fā)事務(wù)不會(huì)以違反數(shù)據(jù)庫一致性的方式相互干擾。事務(wù)的隔離級(jí)別定義了該事務(wù)與其他事務(wù)隔離的程度。

有不同的隔離級(jí)別,范圍從低到高隔離:

  1. 未提交的讀取

    • 此隔離級(jí)別允許事務(wù)讀取其他未提交事務(wù)寫入的數(shù)據(jù)。此級(jí)別可能會(huì)導(dǎo)致諸如臟讀之類的問題,其中事務(wù)讀取稍后可能回滾的數(shù)據(jù),從而導(dǎo)致結(jié)果不一致。
  2. 已提交讀

    • 該級(jí)別的事務(wù)只能讀取其他事務(wù)已提交的數(shù)據(jù)。雖然這可以防止臟讀,但它仍然可能導(dǎo)致不可重復(fù)讀取,其中一個(gè)事務(wù)讀取相同的數(shù)據(jù)兩次并獲得不同的結(jié)果,因?yàn)榱硪粋€(gè)事務(wù)同時(shí)修改了數(shù)據(jù)。
  3. 可重復(fù)閱讀

    • 此級(jí)別可防止臟讀和不可重復(fù)讀。但是,它仍然允許幻讀,如果其他事務(wù)插入或刪除記錄,事務(wù)可能會(huì)遇到不同的行集。
  4. 可序列化

    • 這是最高的隔離級(jí)別。它確保并發(fā)事務(wù)的結(jié)果與事務(wù)一個(gè)接一個(gè)地串行執(zhí)行的結(jié)果相同。這可以防止臟讀、不可重復(fù)讀和幻讀,但由于其嚴(yán)格的性質(zhì),可能會(huì)對(duì)性能產(chǎn)生影響。

為數(shù)據(jù)庫或事務(wù)選擇的隔離級(jí)別會(huì)影響數(shù)據(jù)一致性和性能之間的平衡,較高的隔離級(jí)別通常會(huì)因并發(fā)限制較大而導(dǎo)致性能變慢。


DBMS 中的并發(fā)控制

并發(fā)控制是數(shù)據(jù)庫管理系統(tǒng)(DBMS)的一個(gè)關(guān)鍵方面,它確保正確的事務(wù)執(zhí)行,同時(shí)允許多個(gè)事務(wù)同時(shí)執(zhí)行。并發(fā)控制的目標(biāo)是在面對(duì)事務(wù)交錯(cuò)和故障場(chǎng)景時(shí)保持?jǐn)?shù)據(jù)庫的一致性和完整性。本節(jié)涵蓋基于鎖的協(xié)議,包括各種鎖定模式、兩階段鎖定協(xié)議、死鎖處理機(jī)制和基于時(shí)間戳的協(xié)議.

基于鎖的協(xié)議

鎖定是 DBMS 中用于防止并發(fā)執(zhí)行事務(wù)之間發(fā)生沖突的基本機(jī)制。鎖應(yīng)用于數(shù)據(jù)項(xiàng)以控制訪問,確保多個(gè)事務(wù)不會(huì)違反數(shù)據(jù)庫的完整性。在基于鎖的并發(fā)控制中,事務(wù)在對(duì)數(shù)據(jù)項(xiàng)執(zhí)行操作之前獲取鎖,并在操作完成后釋放鎖。

鎖的類型

有多種模式可以鎖定數(shù)據(jù)項(xiàng)。在本節(jié)中,我們將注意力限制在兩種基本模式上:

  1. 共享鎖(S)
    • 當(dāng)事務(wù)只需要讀取數(shù)據(jù)項(xiàng)時(shí),它會(huì)持有該數(shù)據(jù)項(xiàng)的共享鎖。
    • 多個(gè)事務(wù)可以同時(shí)持有同一個(gè)數(shù)據(jù)項(xiàng)的共享鎖。這允許不同事務(wù)并發(fā)讀取數(shù)據(jù)項(xiàng)。
    • 共享鎖不允許事務(wù)修改數(shù)據(jù)項(xiàng)。

示例

  • 事務(wù) T1 持有項(xiàng)目 A 的共享鎖并讀取 A。
  • 事務(wù) T2 持有項(xiàng)目 A 的共享鎖并讀取 A。
  • 兩者都可以讀取數(shù)據(jù),但不能寫入A。
  1. 獨(dú)占鎖(X)
    • 當(dāng)事務(wù)需要讀取和寫入數(shù)據(jù)項(xiàng)時(shí),它會(huì)持有該數(shù)據(jù)項(xiàng)的排他鎖。
    • 任何時(shí)候只有一個(gè)事務(wù)可以持有特定數(shù)據(jù)項(xiàng)的排他鎖。如果一個(gè)事務(wù)擁有排它鎖,則其他事務(wù)無法獲取同一數(shù)據(jù)項(xiàng)的共享鎖或排它鎖。

示例

  • 事務(wù) T1 持有項(xiàng)目 A 的獨(dú)占鎖并對(duì)其進(jìn)行寫入。
  • 當(dāng) T1 持有 A 上的獨(dú)占鎖時(shí),沒有其他事務(wù)可以讀取或?qū)懭?A。

授予鎖

鎖是根據(jù)系統(tǒng)遵循的協(xié)議來授予的,不同的基于鎖的協(xié)議可以控制在事務(wù)執(zhí)行期間如何請(qǐng)求和授予鎖。這些協(xié)議有助于避免沖突,例如更新丟失、臨時(shí)不一致以及其他事務(wù)訪問未提交的數(shù)據(jù)。


兩階段鎖定協(xié)議 (2PL)

兩階段鎖定協(xié)議是一種廣泛使用的協(xié)議,以確保可序列化性 - 一種保證事務(wù)執(zhí)行方式的屬性,其結(jié)果相當(dāng)于在之后執(zhí)行它們另一個(gè)(連續(xù)的)。兩階段鎖定通過在事務(wù)執(zhí)行期間強(qiáng)制執(zhí)行兩個(gè)階段來確??纱谢?/p>

  1. 成長(zhǎng)階段

    • 在此階段,事務(wù)可以獲取鎖,但不能釋放任何鎖。
    • 事務(wù)可以請(qǐng)求任意數(shù)量的鎖,但是一旦釋放鎖,就無法獲取任何新的鎖。當(dāng)執(zhí)行第一次解鎖操作時(shí),此階段結(jié)束。
  2. 收縮階段:

    • 在此階段,事務(wù)可以釋放鎖,但無法獲取任何新鎖。
    • 一旦事務(wù)開始釋放鎖,它就無法鎖定任何其他數(shù)據(jù)項(xiàng)。當(dāng)事務(wù)提交或中止時(shí),此階段結(jié)束。

兩相鎖定協(xié)議保證可串行化,因?yàn)樗梢苑乐规i定圖中的循環(huán),確保執(zhí)行順序遵循嚴(yán)格的可序列化順序。

示例

  • 事務(wù)T1和T2需要更新數(shù)據(jù)項(xiàng)A和B。使用2PL,兩個(gè)事務(wù)都會(huì)在增長(zhǎng)階段獲取必要的鎖,并在完成操作后(收縮階段)釋放它們。

死鎖處理

死鎖 當(dāng)兩個(gè)或多個(gè)事務(wù)正在等待對(duì)方釋放鎖,導(dǎo)致其中一個(gè)都無法繼續(xù)進(jìn)行的情況時(shí),就會(huì)發(fā)生。這會(huì)造成等待事務(wù)的循環(huán),除非回滾一個(gè)或多個(gè)事務(wù),否則無法解決該循環(huán)。

預(yù)防死鎖

死鎖預(yù)防技術(shù)旨在通過對(duì)事務(wù)行為進(jìn)行限制來避免死鎖的發(fā)生。防止死鎖的一種常見策略是使用時(shí)間戳來確定事務(wù)的優(yōu)先級(jí)。

基于時(shí)間戳的死鎖預(yù)防方案

有兩種使用時(shí)間戳的著名死鎖預(yù)防方案

  1. 等待死亡計(jì)劃
    • 這是一種非搶占式死鎖預(yù)防技術(shù)。
    • 如果事務(wù) Ti 請(qǐng)求 Tj 持有的數(shù)據(jù)項(xiàng),則僅當(dāng)其時(shí)間戳小于 Tj 的時(shí)間戳(即 Ti 早于 Tj)時(shí)才允許 Ti 等待。
    • 如果 Ti 的時(shí)間戳大于 Tj,則 Ti 會(huì)回滾(即 Ti“死亡”)。

示例

  • 如果事務(wù) T14、T15 和 T16 的時(shí)間戳分別為 5、10 和 15:
    • 如果 T14 請(qǐng)求 T15 持有的數(shù)據(jù)項(xiàng),T14 將等待,因?yàn)?T14 較舊。
    • 如果T16請(qǐng)求T15持有的數(shù)據(jù)項(xiàng),T16將被回滾,因?yàn)門16比T15年輕。
  1. 傷口等待計(jì)劃
    • 這是一種搶占式死鎖預(yù)防技術(shù)。
    • 如果事務(wù) Ti 請(qǐng)求 Tj 持有的數(shù)據(jù)項(xiàng),則僅當(dāng)其時(shí)間戳大于 Tj 的時(shí)間戳(即 Ti 比 Tj 年輕)時(shí)才允許 Ti 等待。
    • 如果Ti的時(shí)間戳小于Tj的時(shí)間戳,Ti搶占Tj,并且Tj被回滾(即Tj被Ti“傷害”)。

示例

  • 如果事務(wù) T14、T15 和 T16 的時(shí)間戳分別為 5、10 和 15:
    • 如果T14請(qǐng)求T15持有的數(shù)據(jù)項(xiàng),T14將搶占T15,導(dǎo)致T15回滾。
    • 如果T16請(qǐng)求T15持有的數(shù)據(jù)項(xiàng),T16將等待,因?yàn)樗萒15年輕。

基于時(shí)間戳的協(xié)議

除了基于鎖的協(xié)議之外,基于時(shí)間戳的協(xié)議還管理數(shù)據(jù)庫中的并發(fā)性。這些協(xié)議使用時(shí)間戳來排序事務(wù)并解決沖突,確保系統(tǒng)的行為就像事務(wù)是串行執(zhí)行的一樣。

時(shí)間戳及其作用

時(shí)間戳是創(chuàng)建交易時(shí)分配給交易的數(shù)值。交易的時(shí)間戳決定了其優(yōu)先級(jí)——較低的時(shí)間戳值表示較舊的交易,較高的值表示較新的交易。

  1. W 時(shí)間戳(Q):

    • 這表示已成功對(duì)數(shù)據(jù)項(xiàng) Q 執(zhí)行寫入操作的任何事務(wù)的最大時(shí)間戳。
    • 它有助于識(shí)別修改數(shù)據(jù)項(xiàng)的最后一筆交易。
  2. R-時(shí)間戳(Q):

    • 這表示已成功對(duì)數(shù)據(jù)項(xiàng) Q 執(zhí)行讀取操作的任何事務(wù)的最大時(shí)間戳。
    • 它有助于識(shí)別讀取數(shù)據(jù)項(xiàng)的最后一個(gè)事務(wù)。

時(shí)間戳排序協(xié)議

時(shí)間戳排序協(xié)議通過根據(jù)時(shí)間戳對(duì)事務(wù)執(zhí)行總排序來確??尚蛄谢T搮f(xié)議要求:

  • 如果一個(gè)事務(wù) Ti 寫入數(shù)據(jù)項(xiàng) Q,而另一個(gè)事務(wù) Tj 讀取或?qū)懭?Q,則 Ti 的時(shí)間戳必須小于 Tj。
  • 類似地,如果 Ti 讀取數(shù)據(jù)項(xiàng) Q,Tj 寫入 Q,則 Ti 的時(shí)間戳必須小于 Tj。

該協(xié)議根據(jù)事務(wù)的時(shí)間戳而不是鎖來解決沖突。

示例

  • 時(shí)間戳為 10 的事務(wù) T1 寫入數(shù)據(jù)項(xiàng) A。
  • 時(shí)間戳為 12 的事務(wù) T2 讀取數(shù)據(jù)項(xiàng) A。
  • 時(shí)間戳排序協(xié)議確保 T1 的寫入操作發(fā)生在 T2 的讀取操作之前,從而保持正確的事務(wù)順序。

以上是事務(wù)和并發(fā)控制:DBMS的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

什么是GTID(全球交易標(biāo)識(shí)符),其優(yōu)勢(shì)是什么? 什么是GTID(全球交易標(biāo)識(shí)符),其優(yōu)勢(shì)是什么? Jun 19, 2025 am 01:03 AM

GTID(全局事務(wù)標(biāo)識(shí)符)通過為每個(gè)事務(wù)分配唯一標(biāo)識(shí),解決了MySQL數(shù)據(jù)庫中復(fù)制和故障轉(zhuǎn)移的復(fù)雜性。 1.它簡(jiǎn)化了復(fù)制管理,自動(dòng)處理日志文件和位置,使從服務(wù)器能基于最后執(zhí)行的GTID請(qǐng)求事務(wù)。 2.保證跨服務(wù)器的一致性,確保每個(gè)事務(wù)在每臺(tái)服務(wù)器上僅應(yīng)用一次,避免數(shù)據(jù)不一致。 3.提升故障排查效率,GTID包含服務(wù)器UUID和序列號(hào),便于追蹤事務(wù)流并精準(zhǔn)定位問題。這三項(xiàng)核心優(yōu)勢(shì)使MySQL復(fù)制更穩(wěn)健、易管,顯著提升系統(tǒng)可靠性與數(shù)據(jù)完整性。

MySQL Master故障轉(zhuǎn)移的典型過程是什么? MySQL Master故障轉(zhuǎn)移的典型過程是什么? Jun 19, 2025 am 01:06 AM

MySQL主庫故障切換主要包括四個(gè)步驟。1.故障檢測(cè):通過監(jiān)控系統(tǒng)定期檢查主庫進(jìn)程、連接狀態(tài)及執(zhí)行簡(jiǎn)單查詢判斷是否宕機(jī),設(shè)置重試機(jī)制避免誤判,并可借助MHA、Orchestrator或Keepalived等工具輔助檢測(cè);2.選擇新主庫:根據(jù)數(shù)據(jù)同步進(jìn)度(Seconds_Behind_Master)、binlog數(shù)據(jù)完整性、網(wǎng)絡(luò)延遲與負(fù)載情況選取最合適從庫接替,必要時(shí)進(jìn)行數(shù)據(jù)補(bǔ)償或人工干預(yù);3.切換拓?fù)洌簩⑵渌麖膸熘赶蛐轮鲙?,?zhí)行RESETMASTER或啟用GTID,更新VIP、DNS或代理配置以

如何使用命令行連接到MySQL數(shù)據(jù)庫? 如何使用命令行連接到MySQL數(shù)據(jù)庫? Jun 19, 2025 am 01:05 AM

連接MySQL數(shù)據(jù)庫的步驟如下:1.使用基本命令格式mysql-u用戶名-p-h主機(jī)地址進(jìn)行連接,輸入用戶名和密碼后即可登錄;2.若需直接進(jìn)入指定數(shù)據(jù)庫,可在命令后加上數(shù)據(jù)庫名,如mysql-uroot-pmyproject;3.若端口非默認(rèn)3306,需添加-P參數(shù)指定端口號(hào),如mysql-uroot-p-h192.168.1.100-P3307;此外,遇到密碼錯(cuò)誤可重新輸入,連接失敗需檢查網(wǎng)絡(luò)、防火墻或權(quán)限設(shè)置,若缺少客戶端可在Linux上通過包管理器安裝mysql-client。掌握這些命令

如何將MySQL bin目錄添加到系統(tǒng)路徑 如何將MySQL bin目錄添加到系統(tǒng)路徑 Jul 01, 2025 am 01:39 AM

要將MySQL的bin目錄添加到系統(tǒng)PATH,需根據(jù)不同操作系統(tǒng)進(jìn)行配置。1.Windows系統(tǒng):找到MySQL安裝目錄下的bin文件夾(默認(rèn)路徑通常為C:\ProgramFiles\MySQL\MySQLServerX.X\bin),右鍵“此電腦”→“屬性”→“高級(jí)系統(tǒng)設(shè)置”→“環(huán)境變量”,在“系統(tǒng)變量”中選中Path并編輯,新增MySQLbin路徑,保存后重啟命令提示符并輸入mysql--version驗(yàn)證;2.macOS和Linux系統(tǒng):Bash用戶編輯~/.bashrc或~/.bash_

MySQL中的交易隔離級(jí)別是多少?默認(rèn)值是哪個(gè)? MySQL中的交易隔離級(jí)別是多少?默認(rèn)值是哪個(gè)? Jun 23, 2025 pm 03:05 PM

MySQL的默認(rèn)事務(wù)隔離級(jí)別是可重復(fù)讀(RepeatableRead),它通過MVCC和間隙鎖防止臟讀和不可重復(fù)讀,并在大多數(shù)情況下避免幻讀;其他主要級(jí)別包括讀未提交(ReadUncommitted),允許臟讀但性能最快,1.讀已提交(ReadCommitted)確保讀取已提交數(shù)據(jù)但可能遇到不可重復(fù)讀和幻讀,2.可重復(fù)讀(RepeatableRead)默認(rèn)級(jí)別,保證事務(wù)內(nèi)多次讀取結(jié)果一致,3.串行化(Serializable)最高級(jí)別,通過鎖阻止其他事務(wù)修改數(shù)據(jù),確保數(shù)據(jù)完整性但犧牲性能;可通過

MySQL交易的酸特性是什么? MySQL交易的酸特性是什么? Jun 20, 2025 am 01:06 AM

MySQL事務(wù)遵循ACID特性,確保數(shù)據(jù)庫事務(wù)的可靠性和一致性。首先,原子性(Atomicity)保證事務(wù)作為不可分割的整體執(zhí)行,要么全部成功,要么全部失敗回滾,例如轉(zhuǎn)賬操作中取款和存款必須同時(shí)完成或同時(shí)不發(fā)生;其次,一致性(Consistency)確保事務(wù)將數(shù)據(jù)庫從一個(gè)有效狀態(tài)轉(zhuǎn)換到另一個(gè)有效狀態(tài),通過約束、觸發(fā)器等機(jī)制保持?jǐn)?shù)據(jù)邏輯正確;第三,隔離性(Isolation)控制多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)的可見性,防止臟讀、不可重復(fù)讀和幻讀,MySQL支持ReadUncommitted、ReadCommi

為什么索引可以提高M(jìn)ySQL查詢速度? 為什么索引可以提高M(jìn)ySQL查詢速度? Jun 19, 2025 am 01:05 AM

IndexesinMySQLimprovequeryspeedbyenablingfasterdataretrieval.1.Theyreducedatascanned,allowingMySQLtoquicklylocaterelevantrowsinWHEREorORDERBYclauses,especiallyimportantforlargeorfrequentlyqueriedtables.2.Theyspeedupjoinsandsorting,makingJOINoperation

MySQL WorkBench在哪里保存連接信息 MySQL WorkBench在哪里保存連接信息 Jun 26, 2025 am 05:23 AM

MySQLWorkbench將連接信息存儲(chǔ)在系統(tǒng)的配置文件中,具體路徑因操作系統(tǒng)而異:1.Windows系統(tǒng)中位于%APPDATA%\MySQL\Workbench\connections.xml;2.macOS系統(tǒng)中位于~/Library/ApplicationSupport/MySQL/Workbench/connections.xml;3.Linux系統(tǒng)中通常位于~/.mysql/workbench/connections.xml或~/.local/share/data/MySQL/Wor

See all articles