Database-Design

作業系統和事務數據庫中的並發控制有什麼區別?

  • January 4, 2021

最近我正在學習事務數據庫中的並發控制技術。但是,我對作業系統和事務數據庫中的並發控制之間的差異感到非常困惑。

在我的理解中,數據庫文獻中介紹的並發控制技術可以用於多執行緒程序,其執行緒之間共享一些變數,反之亦然。多執行緒程序中用於線上程之間共享變數的技術也可以在數據庫中用於並發控制。

為什麼我們要費心在數據庫文獻和作業系統中以不同的方式介紹這一點?

數據庫有兩個並發要求。一種是對引用的記憶體塊進行非常短期的物理管理。這些在 DB 世界中被稱為鎖存器,可以使用互斥鎖等來實現。這里關注的是在工作執行緒訪問記憶體塊時的穩定性。

第二個控制數據庫中保存的客戶端數據的有效性和隔離性。它們控制對邏輯事物(元組、表等)而不是物理硬體相關事物(記憶體塊)的訪問。這些被稱為鎖。它們的持續時間與客戶端事務的持續時間一樣長,可以是任意長的時間。鎖通常保持在與保持鎖定對象的結構不同的結構中。因此,鎖定的東西不需要在持有鎖的整個持續時間內都在記憶體中。例如,可能會讀入一個頁面,插入一行並對其進行鎖定以確保隔離。如果包含新行的頁面被驅逐,鎖將保持有效。確實,被鎖的東西在被取鎖的時候可能就不存在了!範圍鎖保護鍵值從下限到上限。獲取鎖時,這些值都不需要存在於數據中,也不能存在落在該範圍內的值。儘管如此,鎖將生效並允許隔離客戶的工作。

Goetz Graefe 的“ B 樹鎖定技術概覽”的介紹部分很好地涵蓋了這些想法。

作業系統只處理其中的第一個(以我有限的專業知識)。任何磁碟擴展都隱藏在虛擬記憶體和頁面文件後面。相比之下,DBMS 顯式處理 RAM 和磁碟駐留以針對其特定案例進行優化。不同的需求導致 OS 和 DBMS 之間的處理方式不同。

引用自:https://dba.stackexchange.com/questions/281881