天天看點

MySQL的故事彙【第一季】【第1集】索引

createdtime 20220401
updatedtime 20220401
author venki.chen
資料池
MySQL的故事彙【第一季】【第1集】索引
主鍵索引樹在磁盤的存在形式
MySQL的故事彙【第一季】【第1集】索引
普通索引樹在磁盤的存在形式
MySQL的故事彙【第一季】【第1集】索引
資料在記憶體的形式
MySQL的故事彙【第一季】【第1集】索引
資料在buffer pool
MySQL的故事彙【第一季】【第1集】索引
buffer pool
  1. buffer pool中的頁是從磁盤中的頁複制而來的;
  2. 每頁資料占據空間為16kb,buffer pool預設空間大小為128M,大概可以存放8192頁;
free連結清單
  1. 此連結清單為free連結清單,專門用于存儲buffer pool中空置頁資訊;
  2. 由基結點和控制塊結點組成;
  3. 基結點用于存儲結點資訊(首尾結點指針位址等);
  4. 控制塊用于管理空白頁;
  5. 從磁盤中取到資料後,通過free連結清單,找到空白頁,然後将資料複制過去,之後移除free連結清單此控制塊;
flush連結清單
  1. 當執行資料更新等操作,引起buffer pool中的頁資料變化後,此時的資料頁可以了解為髒頁(資料并不是立馬寫入磁盤的,性能不夠好),而記錄這些髒頁的資訊就是flush連結清單的意義;
  2. 可以了解為:MySQL背景線程會定時的尋找髒頁,然後添加到連結清單;
  3. 髒頁最後是需要持久化到磁盤的;
  4. 髒頁寫入磁盤的機制和redo log的設定有關。
lru連結清單
  1. 當buffer pool所有資料頁全部沾滿之後,就應該存在一種機制進行淘汰;
  2. buffer pool中最近使用過的資料頁,會被放置連結清單的頭部,最少使用的放置連結清單尾部,是以最先淘汰的是連結清單尾部的控制塊;
  3. 當buffer pool沒有占滿的時候,存在一些熱資料經常被通路到的,但是偶爾出現一次全表掃描,那麼将會清掉buffer pool中全部資料頁(換血),包括熱資料,那麼問題就是:全盤掃描不是經常出現的,而那些熱資料則是經常被通路,顯然此時性能就下降了(因為還要再去磁盤擷取資料到buffer pool中);
  4. 為解決3帶來的問題,那麼lru連結清單被分為兩部分,如圖所示。資料從磁盤擷取後,先将資料加到冷資料區域的頭部,當冷資料區域控制塊對應的資料頁連續兩次通路時間大于1s時,就會将冷資料區域對應的資料頁挪移到熱資料區域的頭部;
  5. 為什麼是大于1s,舉例說明:對于全盤掃描而言,某一資料頁重複通路的時間遠遠小于1s。因為一個資料頁存在多條資料記錄,逐條掃描的時間很短。

繼續閱讀