mysql lru LRU在MySQL快取池的實現

2021-10-17 16:32:07 字數 780 閱讀 9553

mysql的innodb引擎設定有索引及資料快取池,其中用到的lru演算法來維持快取的命中率

這裡用到了順序表list來作為緩衝池,每個資料節點稱為block

該演算法採用「中點插入法」:當插入乙個新block時,移除表尾最近最少使用的block,在中點插入新block。

這個中點將鍊錶分為兩部分:

1.靠近表頭的一部分,為young區,這裡的block是最近使用的節點

2.靠近表尾的一部分,為old區,這裡的block是最近少使用的

該演算法通過鍊錶中的block的使用熱度來維持各block的位置,其中old區的block為鍊錶滿的時候移除的候選區

具體演算法如下:

1.鍊錶的3/8被設定為old區

2.中點不是鍊錶的中間點,而是old區的表頭節點,即old區與young區的相鄰的那個節點

3.當讀取的資料不在緩衝池裡的時候,讀取到的block需要插入到鍊錶中,插入點為中點,但是插入的新節點為old區的節點,如果此時old區滿了得話,移除表尾的block(lru節點)

4.當讀取old區的block時,該節點將變成「young」節點:此節點移動到young區的表頭(young區的頭部那裡)

5.在資料庫操作中,被訪問的節點將移除到young的表頭,這樣一來,在young區中的未被訪問的節點將逐漸往表尾移動,當移動過中點,將變為old區的節點。而old區的節點若被訪問到將變為young節點移動到表頭,而old區中的為被訪問的節點依舊往表尾移動,當表滿時,表尾那個block將會被淘汰掉

這裡不涉及到具體**實現,只是簡單講了下原理,待實現出來後再貼上來

docker 在centos映象安裝mysql

一.安裝centos映象 1.拉取最新版本centos映象 拉取centos7 則使用centos 7即可 docker pull centos lasted2.檢視已有映象 docker images3.執行映象 請看下文提到的大坑 docker run d name container name...

在Windows和Linux上安裝MySQL

my.ini檔案的配置內容 mysqld 設定3306埠 port 3306 設定mysql的安裝目錄 basedir d myserver mysql 8.0.22 winx64 設定mysql資料庫的資料的存放目錄 datadir d myserver mysql 8.0.22 winx64 d...

通過xshell在linux上安裝mysql5 7

自 0 通過xshell連線到遠端伺服器 1 徹底刪除原來安裝的mysql 首先檢視 rpm qa grep i mysql 刪除操作 乙個乙個刪除 yum remove 軟體名 檢視關於mysql的檔案 find name mysql 可以通過xftp直接刪除 對於頑固的資料夾 rm rf 檔名 ...