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也需要永續性的保護
待更新…