iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
Software Development

TiDB學習筆記系列 第 24

D24 - Transaction

資料庫透過transaction保證資料不會因為各種天災人禍而消失。當高併發的需求同時湧入,如果沒有transaction,就會產生衝突導致常見的dirty read,Phantom Read發生。

TiDB支持分布式事務,透過SS2PL(strong strict two-phase locking)與MVCC(Multi-Version Concurrency Control)。

TiDB在3.0.8版本之前是採用樂觀事務,當client開始一個transaction,然後執行一次或者多次的DML,此時的DML會先存在TiDB server的buffer中,當client執行commit之後,這時候TiDB server透過prewrite+lock與commit的二階段式,將key與value寫入TiKV。

而在之後的版本,TiDB轉為預設使用悲觀事務。與樂觀事務不同的點在於當client開始一個transaction,執行了DML之後,此時會先對要異動的key上鎖。當client執行commit,則一樣透過二階段式寫入key與value。透過使用悲觀事務,TiDB提供了Read-committed isolation level。

當使用樂觀事務時,在transaction的語法使用上,與MySQL基本上沒什麼差別,同樣使用begin,start transaction,rollback,commit等等。TiDB不同的點在於當執行了begin或者執行了DDL語法,會implicit commit,翻譯成隱式提交。意思是會將前一個transaction自動commit,然後另開一個新的transaction。
而當使用悲觀事務的時候,與MySQL的差異在TiDB不支援Gap lock只支援Row lock且只對讀取到的Row才會上鎖。


上一篇
Day23 - Online DDL
下一篇
D25 - 樂觀事務與悲觀事務
系列文
TiDB學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言