DBMS - 事務



事務可以定義為一組任務。單個任務是最小的處理單元,不能再細分。

讓我們來看一個簡單的交易示例。假設銀行職員將 500 盧比從 A 的賬戶轉到 B 的賬戶。這個非常簡單的小型交易涉及多個低階任務。

A 的賬戶

Open_Account(A)
Old_Balance = A.balance
New_Balance = Old_Balance - 500
A.balance = New_Balance
Close_Account(A)

B 的賬戶

Open_Account(B)
Old_Balance = B.balance
New_Balance = Old_Balance + 500
B.balance = New_Balance
Close_Account(B)

ACID 屬性

事務是程式中非常小的單元,它可能包含多個低階任務。資料庫系統中的事務必須維護原子性一致性隔離性永續性——通常稱為 ACID 屬性——以確保準確性、完整性和資料完整性。

  • 原子性 - 此屬性規定必須將事務視為原子單元,即要麼執行其所有操作,要麼不執行任何操作。資料庫中一定不能存在事務部分完成的狀態。狀態應在事務執行之前或事務執行/中止/失敗之後定義。

  • 一致性 - 任何事務後,資料庫都必須保持一致狀態。任何事務都不應對資料庫中駐留的資料產生任何不利影響。如果資料庫在事務執行之前處於一致狀態,則在事務執行之後也必須保持一致狀態。

  • 永續性 - 資料庫應該足夠持久,即使系統發生故障或重啟也能儲存所有最新的更新。如果事務更新資料庫中的一塊資料並提交,則資料庫將儲存修改後的資料。如果事務提交但系統在資料寫入磁碟之前發生故障,則系統恢復執行後將更新該資料。

  • 隔離性 - 在資料庫系統中,多個事務同時並行執行時,隔離性屬性規定所有事務都將被執行,就好像它是系統中唯一的事務一樣。任何事務都不會影響任何其他事務的存在。

可序列化

當多個事務在多程式設計環境中由作業系統執行時,可能存在一個事務的指令與其他事務的指令交錯的情況。

  • 排程 - 事務的按時間順序執行序列稱為排程。排程中可以有多個事務,每個事務包含許多指令/任務。

  • 序列排程 - 這是一種排程,其中事務以一種方式對齊,即一個事務首先執行。當第一個事務完成其週期後,則執行下一個事務。事務一個接一個地排序。這種型別的排程稱為序列排程,因為事務以序列方式執行。

在多事務環境中,序列排程被視為基準。事務中指令的執行順序不能更改,但是兩個事務可以以隨機方式執行其指令。如果兩個事務相互獨立並在資料的不同段上工作,則此執行不會造成任何損害;但是,如果這兩個事務正在處理相同的資料,則結果可能會有所不同。這種不斷變化的結果可能會使資料庫處於不一致的狀態。

為了解決這個問題,如果其事務是可序列化的或它們之間存在某種等價關係,我們允許並行執行事務排程。

等價排程

等價排程可以是以下型別:

結果等價

如果兩個排程在執行後產生相同的結果,則稱它們是結果等價的。它們可能對某些值產生相同的結果,而對另一組值產生不同的結果。這就是為什麼這種等價通常不被認為很重要。

檢視等價

如果兩個排程中的事務以類似的方式執行類似的操作,則這兩個排程將是檢視等價的。

例如:

  • 如果 T 在 S1 中讀取初始資料,則它也在 S2 中讀取初始資料。

  • 如果 T 讀取 J 在 S1 中寫入的值,則它也讀取 J 在 S2 中寫入的值。

  • 如果 T 在 S1 中對資料值執行最終寫入,則它也在 S2 中對資料值執行最終寫入。

衝突等價

如果兩個排程具有以下屬性,則它們將是衝突的:

  • 兩者都屬於單獨的事務。
  • 兩者都訪問相同的資料項。
  • 兩者中至少一個是“寫入”操作。

具有包含衝突操作的多個事務的兩個排程被稱為衝突等價,當且僅當:

  • 兩個排程都包含相同的交易集。
  • 兩個排程中都保持衝突操作對的順序。

注意 - 檢視等價排程是檢視可序列化的,衝突等價排程是衝突可序列化的。所有衝突可序列化排程也是檢視可序列化的。

事務狀態

資料庫中的事務可以處於以下狀態之一:

Transaction States
  • 活動 - 在此狀態下,正在執行事務。這是每個事務的初始狀態。

  • 部分提交 - 當事務執行其最終操作時,據說它處於部分提交狀態。

  • 失敗 - 如果資料庫恢復系統進行的任何檢查失敗,則事務據說處於失敗狀態。失敗的事務無法繼續進行。

  • 中止 - 如果任何檢查失敗並且事務已到達失敗狀態,則恢復管理器將撤消其在資料庫上的所有寫入操作,以使資料庫恢復到事務執行之前的原始狀態。處於此狀態的事務稱為中止的事務。資料庫恢復模組可以在事務中止後選擇以下兩個操作之一:

    • 重新啟動事務
    • 終止事務
  • 已提交 - 如果事務成功執行所有操作,則稱其已提交。其所有效果現在已永久建立在資料庫系統中。

廣告