《第二講 一條更新sql是如何執行的》-讀書筆記

一條更新語句的執行跟查詢執行的流程是一樣的,也是如下圖:

不一樣的地方,會寫兩個日誌,兩段式提交:

redo log:在innodb寫,通過creach-safe模式寫。

bin log:在service寫,任何引擎都可以用,mysql公共執行日誌,記錄每一條語句執行。

redo log

redolog日誌在內存中是固定大小的,一個組redo寫版是一個1g,可以配置多組寫版。redo log是邊寫日誌到內存邊同步到磁盤。寫的指針爲writepos,同步到磁盤的指針是checkpoint。當writepos要追趕checkpoint上時,這個時候就會停止下來擦除一些記錄,把checkpoint向前推。

bin log

bin log 是mysql serve層實現的,所有的引擎都可以用,記錄操作記錄。

兩段式提交

當一條更新語句進入執行器後,先調用引擎接口,如果innodb判斷是否存在內存,如果存在就返回數據行,如果不存在就從磁盤讀入數據頁,然後返回行數。

Server對行進行update操作。

通過引擎接口寫入新行,寫日rido日誌,此刻日誌處於prapare狀態。

Server此時再寫bin log

提交事務,redo log處於commit狀態。

爲什麼要兩段式提交

保證數據和日誌一致性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章