1. 程式人生 > 其它 >InnoDB儲存結構

InnoDB儲存結構

1.3.2 InnoDB儲存結構 

MySQL 5.5版本開始預設使用InnoDB作為引擎,它擅長處理事務,具有自動崩潰恢復的特性。下面是官方的InnoDB引擎架構圖,主要分為記憶體結構和磁碟結構兩大部分 1.3.2.1 InnoDB記憶體結構(包含四大元件) 記憶體結構主要包括buffer Pool, Change Buffer, Adaptive Hash Index和log buffer四大元件 1.3.2.1.1 Buffer Pool(緩衝池) 簡稱BP,BP以Page頁為單位,預設大小16K,底層採用了連結串列資料結構管理Page,在InnoDB訪問記錄和索引時會在Page頁中快取,以後使用可以減少磁碟IO操作,提升效率
   page管理機制可以分為三種類型  a. free page(空閒)  b. clean page(被使用page) c. dirty  page(dirty page) 1.3.2.1.2 Change Buffer(寫快取區) 簡稱CB, 在進行DML(增刪改) 操作時,如果BP沒有其相應的Page資料,並不會立刻將磁碟頁載入到緩衝池,而是在CB記錄緩衝變更,等未來資料被讀取時,再將資料合併恢復到BP中 changeBuffer佔用bufferPool空間,預設佔25%,最大允許佔50%,當更新一條記錄時,該記錄在bufferPool存在,直接在BufferPool修改,一次記憶體操作,如果該記錄在bufferPool不存在(沒有命中),會直接在ChangeBuffer進行一次記憶體操作,不用再去磁碟查詢資料,避免一次磁碟,當下次查詢記錄時,會先進行磁碟讀取,然後再從channgeBuffer中讀取資訊合併,最終載入BufferPool中 寫入緩衝區,僅使用於非唯一普通索引頁,為什麼? 如果在索引設定唯一性,在進行修改時,
InnoDB必須要做唯一性效驗,因此必須查詢磁碟,做一次IO操作,會直接將記錄查詢到BufferPool中,然後在緩衝池修改,不會在ChangeBuffer操作 1.3.2.1.3 Adaptive Hash Index(自適應雜湊索引) 用於優化對BP資料的查詢,InnoDB儲存引擎會監控對錶索引的查詢,如果觀察到建立雜湊索引可以帶來速度的提升,則建立雜湊索引,所以稱之為自適應InnoDB儲存引擎會自動根據訪問的頻率和模式來為某些頁建立hash索引 1.3.2.1.4 log buffer(日誌快取區) 日誌緩衝區,用來儲存要寫入磁碟上log檔案(Redo/Undo)的資料,日誌緩衝區的內容定期重新整理到磁碟Log檔案中,日誌緩衝區滿時會自動將其重新整理到磁碟,當遇到BLOB或多行更新的大事務操作時,增加日誌緩衝區可以節省磁碟I/O
LogBuffffer主要是用於記錄InnoDB引擎日誌,在DML操作時會產生Redo和Undo日誌。 LogBuffffer空間滿了,會自動寫入磁碟。可以通過將innodb_log_buffffer_size引數調大,減少磁碟IO頻率 innodb_flflush_log_at_trx_commit引數控制日誌重新整理行為,預設為1 0:  每隔1秒寫日誌檔案和刷盤操作(寫日誌檔案LogBuffffer-->OS cache,刷盤OS  cache-->磁碟檔案),最多丟失1秒資料 1:事務提交,立刻寫日誌檔案和刷盤,資料不丟失,但是會頻繁IO操作 2:事務提交,立刻寫日誌檔案,每隔1秒鐘進行刷盤操作 1.3.2 InnoDB磁碟結構 InnoDB磁碟主要包含Tablespaces,InnoDB Data Dictionary,Doublewrite Buffffer、Redo Log 和Undo Logs。