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