天天看點

Redo日志--mysql詳解(九)

篇文章說了,重新整理資料是通過頁為機關,不可能每次查詢都從磁盤查詢,于是有了buffer pool,通過free,flush來重新整理到磁盤,系統正常關閉,系統空閑,記憶體不足時候重新整理。lru連結清單為了提高緩存命中率來重新整理頁到磁盤。後面介紹了acid,原子性代表在一個事務裡要麼全部成功要麼全部失敗,一緻性官方文檔解釋是除了資料庫的主鍵唯一建等限制外,還有業務的限制保證一直性,新增和扣減必須一緻。

​​Buffer pool--mysql詳解(八)

Redo日志

我們為了保證持久化,每次都需要把資料重新整理到磁盤上,但我們是根據頁來重新整理的,并且修改一條sql語句可能包含很多頁,但每個頁值修改一個位元組,很少的資料,這時候總不能直接持久化,但如果系統當機了,資料沒有持久化就會丢失,于是,redo日志就出現了(重做日志)。

Redo日志有兩個特點,占用非常小,并且順序寫入磁盤(頁的存放是随機I/O)。

是以redo日志大緻就是type,space id表空間id,page numer頁号,data 日志具體内容。

前面說過當表沒有主鍵或者唯一建,這時候會給一個隐藏的row_id,有個max_row_id是一個全局變量,每次插入會自增1。

我們在執行一條修改語句會修改很多資料,比如索引的幾棵b+樹,樹上的内節點和葉子節點等,也可能建立新頁面。

Redo日志有日志緩沖區,類似于buffer pool,會申請redo log buffer連續記憶體,預設16mb。