mysql+清理undo_undo清理 redo 持久化
為了進行mvcc(多版本并發(fā)控制)與回滾,innodb單獨管理著undo空間(undo space、rollback segment)。
1)當執(zhí)行update語句后,即使不執(zhí)行commit,數(shù)據(jù)列也會在innodb緩沖池修改。但是innodb存儲引擎無法確定用戶執(zhí)行update語句后,執(zhí)行rollback操作還是commit操作。
因此為了應對用戶可能rollback操作的情形,先要將修改之前的數(shù)據(jù)保存到undo日志。
2)當用戶進行commit,緩沖池中變更的內(nèi)容就會持久化。
3)當用戶進行rollback,就會將保存在undo日志的舊數(shù)據(jù)還原。
innodb不會將緩沖池中的內(nèi)容立即刷到數(shù)據(jù)文件,而是按照一定周期寫入。所以,執(zhí)行完(1)時,數(shù)據(jù)文件列值可能為新值,也可能為舊值。(若innodb的后臺線程已經(jīng)將記錄寫入數(shù)據(jù)文件,那么原值就會被更新為新值)
大量客戶連接中的數(shù)據(jù)發(fā)生變化時,undo日志會積累許多變更前的信息,這些積累的信息必須在某時刻進行刪除,留出足夠空間來保存以后的變更內(nèi)容,這個動作就是undo清理(undo purge)。mysql5.7的innodb,允許用戶將innodb_purge_threads系統(tǒng)變量設置為大于1的值,這樣就可以多個undo清理線程做清理工作。
redo持久化:
當執(zhí)行DML語句時,變更的數(shù)據(jù)會先記錄到重做(redo)日志,同時持久化到磁盤。
innodb存儲引擎只在內(nèi)存(innodb緩沖池)中更改實際數(shù)據(jù)表的數(shù)據(jù),innodb會在某個時刻將僅在內(nèi)存(innodb緩沖池)中更改的數(shù)據(jù)持久化到磁盤。
總結(jié)
以上是生活随笔為你收集整理的mysql+清理undo_undo清理 redo 持久化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kong DB-LESS和DB模式的对比
- 下一篇: jdk1.8版本连接Access数据库驱