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