溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL數據庫中FreeList的機制是什么

發布時間:2020-11-26 14:54:31 來源:億速云 閱讀:546 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關MySQL數據庫中FreeList的機制是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一、前言

MySQL啟動后,BufferPool就會被初始化,在你沒有執行任何查詢操作之前,BufferPool中的緩存頁都是一塊塊空的內存,未被使用過也沒有任何數據保存在里面。

而且你也知道了通過緩沖頁的描述信息可以直接且唯一的找到它所指向的緩存頁。

那你有沒有想過,我們從磁盤里面讀取出來的 數據頁 應該放到那個緩沖頁中去呢?

這個問題就引出了Free List。

二、Free List

其實Free List是Buffer Pool中基于緩存頁描述信息 組織起來的雙向鏈表。換言之,Free List中的每一個結點都是緩存頁對應的描述信息。并且通過描述信息可以找到指定的緩存頁(緩存頁)

InnoDB設計Free List的初衷就是為了解決上面說的問題。

如果這個緩存頁中沒有存儲任何數據,那么它對應的描述信息就會被維護進Free List中。這時當你想把從磁盤中讀取出一個數據頁放入緩存頁中的話,就得先從Free List中找一個節點(Free List中的所有節點都會指向一個從未被使用過的緩存頁),那接著就可以把你讀取出來的這個數據頁放入到該節點指向的緩存頁中。

相應的:當數據頁中被放入數據之后。它對應的描述信息塊會被從Free List中移出。

三、如何判斷數據頁有沒有在緩存中?

你會不會納悶MySQL怎么知道剛讀取出來的這個數據頁有沒有在緩存頁中呢?

這個功能的實現依托于另一個數據結構:hash table

key = 表空間號+數據頁號

value = 緩存頁地址

如果存在于hash table中,那就說明該數據頁已經存在于Buffer Pool中了,優先使用Buffer Pool中的緩存頁。相信你肯定能想到為啥優先使用Buffer Pool中的緩存頁吧!首先免去了磁盤的隨機IO,其次緩存頁中的數據可能是已經被修改了的臟數據。

以上就是詳解 MySQL的FreeList機制的詳細內容,更多關于MySQL FreeList機制的資料請關注億速云其它相關文章!

看完上述內容,你們對MySQL數據庫中FreeList的機制是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女