主流關聯式資料庫鎖實現的區別

宅慕思_發表於2019-10-10

SQL Server實現的鎖主要是由透過鎖表來實現,在記憶體中開闢專門區域對於不同級別的物件(行、鍵-塊-物件、索引-庫)相應的鎖記錄,事務層和儲存層完全分離,並且鎖佔用開銷較大,當鎖佔用較多資源的時候,會進行鎖升級降低併發性。


MySQL對與鎖的實現主要是行鍵的實現,採用在頁面頭部記錄點陣圖的方式,這樣做在檢索行鎖記錄的時候需要到頁面頭部獲取資料,頁面頭部因為用點陣圖資訊記錄行鎖,所以相比SQL Server省去了較多的資源,無需進行鎖升級。另外gap lock的實現可以很好的支援高階別的隔離級別和併發性的提升,例如RR隔離級別。


Oracle對鎖的實現是將事務層和儲存層結合的方式進行處理,鎖的資訊在塊頭的ITL事務槽和行資訊中,這樣做極大的節省了記憶體資源和鎖資源,鎖幾乎不佔用任何資源,鎖定資訊完全結合事務槽和行標誌進行判斷,不像MySQL有單獨的記憶體鎖表分離來處理,在rac模式下,可以很方便的對於除了資料之外的事務和鎖資訊進行同步,儲存及事務,使得rac的設計單一有效,但缺點也很明顯,就是過於結合緊密的事務層和儲存層使得基於事務的擴充套件變得很困難。


PostgreSQL的鎖設計記憶體中不記錄行鎖資訊,行鎖資訊由行上的transactionid資訊得到,節省記憶體資源, 在索引回表時採用mvcc技術避免普通的snapshot now模式或者其他非mvcc需要使用鎖定的劣勢。對於


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69950462/viewspace-2659438/,如需轉載,請註明出處,否則將追究法律責任。

相關文章