mysql-innodb-undo和redo

- 用Undo Log實現原子性和持久化的事務的簡化過程
  假設有A、B兩個數據,值分別爲1,2。
  A.事務開始.
  B.記錄A=1到undo log.
  C.修改A=3.
  D.記錄B=2到undo log.
  E.修改B=4.
  F.將undo log寫到磁盤。
  G.將數據寫到磁盤。
  H.事務提交
  這裏有一個隱含的前提條件:‘數據都是先讀到內存中,而後修改內存中的數據,最後將數據寫回磁盤’。 linux

  之因此能同時保證原子性和持久化,是由於如下特色:
  A. 更新數據前記錄Undo log。
  B. 爲了保證持久性,必須將數據在事務提交前寫到磁盤。只要事務成功提交,數據必然已經持久化。
  C. Undo log必須先於數據持久化到磁盤。若是在G,H之間系統崩潰,undo log是完整的,
     能夠用來回滾事務。
  D. 若是在A-F之間系統崩潰,由於數據沒有持久化到磁盤。因此磁盤上的數據仍是保持在事務開始前的狀態。 緩存

缺陷:每一個事務提交前將數據和Undo Log寫入磁盤,這樣會致使大量的磁盤IO,所以性能很低。 併發

若是可以將數據緩存一段時間,就能減小IO提升性能。可是這樣就會喪失事務的持久性。 性能


- 原理
  和Undo Log相反,Redo Log記錄的是新數據的備份。在事務提交前,只要將Redo Log持久化便可,
  不須要將數據持久化。當系統崩潰時,雖然數據沒有持久化,可是Redo Log已經持久化。系統能夠根據
  Redo Log的內容,將全部數據恢復到最新的狀態。 spa

- Undo + Redo事務的簡化過程
  假設有A、B兩個數據,值分別爲1,2.
  A.事務開始.
  B.記錄A=1到undo log.
  C.修改A=3.
  D.記錄A=3到redo log.
  E.記錄B=2到undo log.
  F.修改B=4.
  G.記錄B=4到redo log.
  H.將redo log寫入磁盤。
  I.事務提交 設計

Undo + Redo事務的特色
  A. 爲了保證持久性,必須在事務提交前將Redo Log持久化。
  B. 數據不須要在事務提交前寫入磁盤,而是緩存在內存中。
  C. Redo Log 保證事務的持久性。
  D. Undo Log 保證事務的原子性。
  E. 有一個隱含的特色,數據必需要晚於redo log寫入持久存儲。 日誌


- IO性能
  Undo + Redo的設計主要考慮的是提高IO性能。雖然說經過緩存數據,減小了寫數據的IO.
  可是卻引入了新的IO,即寫Redo Log的IO。若是Redo Log的IO性能很差,就不能起到提升性能的目的。
  爲了保證Redo Log可以有比較好的IO性能,InnoDB 的 Redo Log的設計有如下幾個特色: 事務

  A. 儘可能保持Redo Log存儲在一段連續的空間上。所以在系統第一次啓動時就會將日誌文件的空間徹底分配。
     以順序追加的方式記錄Redo Log,經過順序IO來改善性能。
  B. 批量寫入日誌。日誌並非直接寫入文件,而是先寫入redo log buffer.當須要將日誌刷新到磁盤時
     (如事務提交),將許多日誌一塊兒寫入磁盤.
  C. 併發的事務共享Redo Log的存儲空間,它們的Redo Log按語句的執行順序,依次交替的記錄在一塊兒,
     以減小日誌佔用的空間。例如,Redo Log中的記錄內容多是這樣的:
     記錄1: <trx1, insert …>
     記錄2: <trx2, update …>
     記錄3: <trx1, delete …>
     記錄4: <trx3, update …>
     記錄5: <trx2, insert …>
  D. 由於C的緣由,當一個事務將Redo Log寫入磁盤時,也會將其餘未提交的事務的日誌寫入磁盤。
  E. Redo Log上只進行順序追加的操做,當一個事務須要回滾時,它的Redo Log記錄也不會從
     Redo Log中刪除掉。 內存

02 – 恢復(Recovery) get

- 恢復策略
  前面說到未提交的事務和回滾了的事務也會記錄Redo Log,所以在進行恢復時,這些事務要進行特殊的
  的處理.有2中不一樣的恢復策略:

  A. 進行恢復時,只重作已經提交了的事務。
  B. 進行恢復時,重作全部事務包括未提交的事務和回滾了的事務。而後經過Undo Log回滾那些
     未提交的事務。



這裏有針對innodb的更多信息,很好的資料

http://linux.chinaitlab.com/manual/database/innodbzh/

相關文章
相關標籤/搜索