InnoDB引擎——7.事物篇

InnoDB引擎——7.事物篇
衆所周知,數據庫的事物非常重要
上篇介紹鎖,討論了事物的隔離性,本章關注事物的原子性。
InnoDB引擎默認是READ REPEATABLE隔離級別.

隔離性=併發控制=可串行化=鎖等

事物類型:(1)扁平事物(2)帶有保存點的扁平事物(3)鏈事物(4)嵌套事物(5)分佈式事物

(1)扁平事物是最簡單的一種,所有操作處於同一層次。
(2)帶有保存點的扁平事物,保存點用來通知系統應該記住當前事物的狀態,以便回滾的時候,能回到保存點。SAVA WORK函數
(3)鏈式事物的思想是:在提交一個事物時,釋放不需要的數據對象,將必要的處理上下文隱式的傳給下一個要開始的事物。注意:提交事物和開始下一個事物合併爲一個原子操作,鏈式事物的回滾僅限於當前事物,只能恢復到最近的一個保存點。
(4)嵌套事物:由一個頂層事物控制着各個層次的事物,頂層事物下嵌套的事物被稱爲子事物。想要實現事物間的並行性,需要真正支持的嵌套事物。
(5)分佈式事物:在一個分佈式系統中運用扁平事物,因此,需要根據數據所在位置訪問網絡中的不同節點。

InnoDB引擎支持扁平事物,帶有保存點事物,鏈事物,分佈式事物。

事物的隔離性由鎖來實現,ACD由redo log,和undo log來完成,redo log保證事物的原子性和持久性,undo log用來保證事物的一致性。

redo恢復提交事物修改的頁操作,而undo回滾行記錄到某個特定的版本,redo通常是物理日誌,記錄的是頁的物理修改操作,undo是邏輯日誌,根據每行記錄進行記錄。

redo log用來保證事物的持久性,undo log 用來幫助事物回滾及MVCC功能。

innodb_flush_log_at_trx_commit可以設置爲0或2來提高事物的提交性能(但是)

還有一種二進制日誌,用來進行(PIT)的恢復和主從複製環境的建立

log block都是以512字節進行存儲的,重做日誌塊大小和磁盤扇區大小一樣都是512字節。(InnoDB引擎存儲管理是基於頁的)

LSN(Log Sequence Number):日誌序列號。記錄的是重做日誌的總量。

undo:對數據庫修改時,不但會產生redo,還會產生一定量的undo。redo存放在重做日誌文件中,undo存放在數據庫內部一個特殊段中,這個段稱爲undo段,undo段位於共享表空間內。undo是邏輯日誌,所有修改都被邏輯取消了,但是數據結構和頁本身在回滾之後可能大不相同。

undo還有一個作用就是MVCC,當用戶讀取一行時,若該記錄已經被其他事物佔用,當前事物可以通過undo讀取之前版本的行版本信息,實現非鎖定讀取,undo log也會產生redo log,因爲undo log也需要持久性的保護

待更新…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章