淺談OceanBase的鎖機制原理

OceanBase鎖定粒度爲行鎖,默認狀況下的隔離級別爲讀取已提交(read committed)。另外,讀操做老是讀取某個版本的快照數據,不須要加鎖。併發

  • 只寫事務(修改單行):事務預提交時對待修改的數據行加寫鎖,事務提交時釋放寫鎖。
  • 只寫事務(修改多行):事務預提交時對待修改的多個數據行加寫鎖,事務提交時釋放寫鎖。爲了保證一致性,採用兩階段鎮的方式實現,即須要在事務預提交階段獲取全部數據行的寫鎖,若是獲取某行寫鎖失敗,整個事務執行失敗。
  • 讀寫事務(read commited):讀寫事務中的讀操做讀取某個版本的快照,寫操做的加鎖方式與只寫事務相同。

爲了保證系統併發性能,OceanBase暫時不支持更高的隔離級別。另外,爲了支持對一致性要求很高的業務,OceanBase容許用戶顯式鎖住某個數據行。例如,有一張帳務表account(account_id,balance),其中account_id爲主鍵。假設須要從A帳戶
(account_id=1)向B帳戶(account_id=2)轉帳100元,那麼,A帳戶須要減小100元,B帳戶須要增長100元,整個轉帳操做是一個事務,執行過程當中須要防止A帳戶和B帳戶被其餘事務併發修改。性能

如如下代碼所示,OceanBase提供了」select...for update」語句用於顯示鎖住A帳戶或者B帳戶,防止轉帳過程當中被其餘事務併發修改。事務

相關文章
相關標籤/搜索