buffer pool : 緩沖池,緩存磁盤的數(shù)據(jù) redo log buffer :記錄對(duì)緩沖池的操作,根據(jù)策略寫入磁盤防止宕機(jī)但事務(wù)已經(jīng)提交而丟失數(shù)據(jù) undo log :當(dāng)對(duì)緩沖池的數(shù)據(jù)進(jìn)行修改時(shí),在事務(wù)未提交的時(shí)候都可以進(jìn)行回滾,將舊值寫入 undo 日志文件便于回滾,此時(shí)緩沖池的數(shù)據(jù)與磁盤中的不一致,是臟數(shù)據(jù) 1. Buffer Pool 假設(shè)現(xiàn)在有一條更新語句:
update users set name = 'lisi' where id = 1 需要更新到數(shù)據(jù)庫,InnoDB會(huì)執(zhí)行哪些操作呢?
2. undo 日志文件 假設(shè) id = 1 這條數(shù)據(jù)name原來的值 name = 'zhangsan',現(xiàn)在我們要更新為 name = 'lisi' , 那么我們就需要把舊值name='zhangsan'和id=1這些信息寫入到undo日志文件中。
3. 更新buffer pool 數(shù)據(jù) 在undo日志文件寫入完畢之后,便開始更新內(nèi)存中的這條數(shù)據(jù)。把 id = 1 的 name = 'zhangsan' 更新為 name = 'lisi'。這時(shí)內(nèi)存中的數(shù)據(jù)已經(jīng)更新完畢,但磁盤上的還沒有變化,此時(shí)出現(xiàn)了不一致的臟數(shù)據(jù)。