理解MySQL資料的持久化過程,能很好的幫助我們加深對於MySQL底層的理解,在本文,我們以一種通俗的方式梳理一下這個過程,幫助大家建立初步的認識,如果大家有興趣,可以去深入學習與研究這個過程。
MySQL資料的儲存總體上可以分為兩部分,記憶體中的儲存過程以及硬碟的持久化存儲,這裡,就涉及到了記憶體中buffer poll
和redo log
以及磁碟上的交易日誌
和表格結構
,在本文中,我們不具體解釋每一部分的具體設計,只是給大家一個概念型的認識:
buffer poll
是InnoDB引擎快取池的一部分,我們這裡可以簡單理解為資料庫從磁碟讀進記憶體的記憶體區塊的快取;
redo log
是記憶體中的邏輯日誌,記錄了交易的變更操作
##交易日誌是磁碟上的食物邏輯日誌
表格結構是真正儲存資料的結構
buffer poll中有對於讀入記憶體的資料的緩存,在查詢命令執行時,會優先在快取中查看是否命中,未命中就會從磁碟中將所需的資料讀進來,快取的管理使用的是改良的LRU演算法,這裡不做深入介紹了。
buffer poll中快取的修改,被修改後的資料會被標記為
髒頁,同時,修改的操作也會記錄在
redo log中,我們常說的MVCC中的版本鏈就是藉由
redo log實現的。
隨機IO與
順序IO的
區別:
順序IO是指尋址的空間是連續的,移動距離很短,
隨機IO是指我們需要尋找的位址分佈在各處,需要移動很長的距離。
隨機IO替換為
順序IO能有效的提高磁碟IO的效率,邏輯日誌的作用正是如此,由於日誌檔案在磁碟上是連續的,相較於分佈在各處的資料表訊息,IO效率能高出很多。
以上是MySQL資料持久化過程實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!