Mysql Innodb儲存引擎記憶體管理

2021-10-10 18:51:01 字數 1097 閱讀 2894

mysql innodb的記憶體管理的組成:

1.buffer pool:預分配的記憶體池

2.page:buffer pool的最小單位

3.free list:空閒page組成的鍊錶

4.flush list: 髒頁鍊錶

5.page hash表:維護記憶體page和磁碟檔案page的對映關係

6.lru:記憶體淘汰演算法(lru鍊錶分為lru_new和lru_old,new熱資料佔總鍊錶的八分之五,old冷資料佔八分之三,通過midpoint標識來分割)

一、innodb頁面載入流程與淘汰

1.磁碟資料載入到記憶體;

2.在page hash表寫入對映關係;

3.從空閒鍊錶中取出空閒頁,鏈入lru_old的頭部;如果沒有空閒頁,從lru中尾部進行淘汰,先將lru的尾頁刪除然後將該空白頁加入到空閒鍊錶,然後從空閒鍊錶取出載入資料,放入lru列表;如果lru被鎖就從flush list鍊錶中取臟頁進行淘汰。(可參考文章的首圖)

二、lru資料位置移動

冷資料old到熱資料new:mysql的config中有innodb_old_blocks_time,old區存活時間,只有大於此值,才有機會進去new區。

熱資料new到冷資料old:並不是資料進行換區,而是分割槽的midpoint指標進行移動,指標一直保持在5/8的位置。

三、lru_new區內的操作

lru資料在移動的過程中其實是在對記憶體就行修改,會觸發鎖(lock),觸發鎖就會降低併發,所以要減少資料的移動。

mysql的策略是:根據兩個引數,freed_page_clock (buffer_pool中淘汰的頁數)、lru_new鍊錶長度的1/4。

計算公式:

freed_page_clock - 此資料頁上次移動到header時的freed_page_clock > lru_new鍊錶長度的1/4

如果條件成立,那麼就對此資料頁就移動至header,否則不動。

mysql InnoDB儲存引擎

innodb的組成部分 1.後台執行緒 2.儲存引擎記憶體池 innodb儲存引擎記憶體緩衝池 1.記憶體緩衝池 innodb是基於磁碟儲存的,並將其中的記錄按照頁的方式進行管理。因此,可將其視為基礎磁碟的資料庫系統。在資料庫系統中,由於cpu速度與磁碟速度之間的紅狗,基於磁碟的資料庫系統通常使用緩...

Mysql Innodb儲存引擎

鎖 參考資料 參考資料 行鎖 innodb的鎖是對索引加鎖,如果查詢到並沒有用到索引就會對錶進行加鎖 record lock 對單條記錄加上鎖 gap lock 間隙鎖,鎖定乙個範圍,但是不包含記錄本身 next key lock record lock gap lock,鎖定乙個方位並鎖定記錄本身...

MYSQL INNODB 儲存引擎

innodb 是事務安全的mysql儲存引擎,設計上採用了類似於oracle的架構。一般而言,在oltp的應用中,innodb應該作為核心應用表的首選儲存引擎。同時,也是因為innodb的存在,才使得mysql變得更有魅力。第一 innodb儲存引擎概述 innodb由innobase oy 公司開...