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


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

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

  1. 原子性

    • 原子性確保事務(wù)被視為單個、不可分割的工作單元。要么執(zhí)行事務(wù)中的所有操作,要么不執(zhí)行。如果事務(wù)的任何部分失敗,整個事務(wù)將回滾,確保數(shù)據(jù)庫保持一致的狀態(tài)。
    • 示例:如果一筆交易涉及從賬戶 A 向賬戶 B 轉(zhuǎn)賬,原子性可確保整個轉(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)。
    • 示例:在兩個銀行帳戶之間轉(zhuǎn)賬后,兩個帳戶中的余額總和應(yīng)保持不變。如果違反數(shù)據(jù)庫一致性規(guī)則,事務(wù)將會回滾。
  3. 隔離

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

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

交易類型

  1. 簡單交易

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

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

交易生命周期

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

  1. 開始交易

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

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

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

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

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

交易狀態(tài)

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

  1. 活躍

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

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

    • 當(dāng)發(fā)現(xiàn)交易無法正常執(zhí)行時,它會進(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),就無法重新啟動。

DBMS 中的時間表

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

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


時間表的類型

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

串行時間表示例

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

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

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

可串行化

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

重要性

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

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

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

可串行化沖突示例:

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

沖突等價、沖突可序列化

  • 等效沖突

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

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

沖突可串行性和沖突等效計劃示例

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

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

時間表1

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

時間表2

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

沖突可串行性檢查

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

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

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


原子性和故障處理

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

當(dāng)事務(wù)失敗時,它對數(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ù)庫的原子性。如果一個事務(wù)依賴于另一個失敗的事務(wù),它不應(yīng)該留下部分更改或不一致的數(shù)據(jù)。

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


可恢復(fù)的時間表

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

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

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

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

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

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


無級聯(lián)時間表

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

例如,考慮以下場景:

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

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

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

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

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

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

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


事務(wù)隔離級別

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

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

  1. 未提交的讀取

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

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

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

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

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


DBMS 中的并發(fā)控制

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

基于鎖的協(xié)議

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

鎖的類型

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

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

示例

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

示例

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

授予鎖

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


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

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

  1. 成長階段

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

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

兩相鎖定協(xié)議保證可串行化,因為它可以防止鎖定圖中的循環(huán),確保執(zhí)行順序遵循嚴(yán)格的可序列化順序。

示例

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

死鎖處理

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

預(yù)防死鎖

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

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

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

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

示例

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

示例

  • 如果事務(wù) T14、T15 和 T16 的時間戳分別為 5、10 和 15:
    • 如果T14請求T15持有的數(shù)據(jù)項,T14將搶占T15,導(dǎo)致T15回滾。
    • 如果T16請求T15持有的數(shù)據(jù)項,T16將等待,因為它比T15年輕。

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

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

時間戳及其作用

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

  1. W 時間戳(Q):

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

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

時間戳排序協(xié)議

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

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

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

示例

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

以上是事務(wù)和并發(fā)控制:DBMS的詳細(xì)內(nèi)容。更多信息請關(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)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

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

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

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

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

如何將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),右鍵“此電腦”→“屬性”→“高級系統(tǒng)設(shè)置”→“環(huán)境變量”,在“系統(tǒng)變量”中選中Path并編輯,新增MySQLbin路徑,保存后重啟命令提示符并輸入mysql--version驗證;2.macOS和Linux系統(tǒng):Bash用戶編輯~/.bashrc或~/.bash_

建立與MySQL Server的安全遠(yuǎn)程連接 建立與MySQL Server的安全遠(yuǎn)程連接 Jul 04, 2025 am 01:44 AM

TosecurelyConnectToaremoteMysqlServer,Usesshtunneling,configuremysqlforremoteaccess,setFireWallrules,andConsidersSlencryption 。首先,stardansshtunnelwithssh-l3307:localhost:3306user@remote-Server-server-nandConnectViamySql-h127.0.0.0.0.1-p3307.second,editmys

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

MySQLWorkbench將連接信息存儲在系統(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

數(shù)據(jù)庫連接池背后的原理是什么? 數(shù)據(jù)庫連接池背后的原理是什么? Jun 20, 2025 am 01:07 AM

aconnectionpoolisacacheofdatabaseconnectionsthatarekeptopenandreusedtoImprovefficed.insteadopenofopeningandclosingsconnectionsforeachReachReachReachReachReachReachReachReachReachReachReachReachReackest,theApplicationBorrowsaconNection fromThectionFromThepool,用途

分析MySQL緩慢查詢?nèi)罩疽圆檎倚阅芷款i 分析MySQL緩慢查詢?nèi)罩疽圆檎倚阅芷款i Jul 04, 2025 am 02:46 AM

開啟MySQL慢查詢?nèi)罩静⒎治隹啥ㄎ恍阅軉栴}。 1.編輯配置文件或動態(tài)設(shè)置slow_query_log和long_query_time;2.日志包含Query_time、Lock_time、Rows_examined等關(guān)鍵字段,輔助判斷效率瓶頸;3.使用mysqldumpslow或pt-query-digest工具高效分析日志;4.優(yōu)化建議包括添加索引、避免SELECT*、拆分復(fù)雜查詢等。例如為user_id加索引能顯著減少掃描行數(shù),提升查詢效率。

使用mySQL中的mysqldump執(zhí)行邏輯備份 使用mySQL中的mysqldump執(zhí)行邏輯備份 Jul 06, 2025 am 02:55 AM

mysqldump是用于執(zhí)行MySQL數(shù)據(jù)庫邏輯備份的常用工具,它生成包含CREATE和INSERT語句的SQL文件以重建數(shù)據(jù)庫。1.它不備份原始文件,而是將數(shù)據(jù)庫結(jié)構(gòu)和內(nèi)容轉(zhuǎn)換為可移植的SQL命令;2.適用于小型數(shù)據(jù)庫或選擇性恢復(fù),不適合TB級數(shù)據(jù)快速恢復(fù);3.常用選項包括--single-transaction、--databases、--all-databases、--routines等;4.恢復(fù)時使用mysql命令導(dǎo)入,并可關(guān)閉外鍵檢查以提升速度;5.建議定期測試備份、使用壓縮、自動化調(diào)

See all articles