国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > 文庫 > 正文

MySQ的Buffer pool是啥

2024-09-07 22:12:46
字體:
來源:轉載
供稿:網友
  通過前邊的嘮叨我們知道,對于使用InnoDB作為存儲引擎的表來說,不管是用于存儲用戶數據的索引(包括聚簇索引和二級索引),還是各種系統數據,都是以頁的形式存放在表空間中的,而所謂的表空間只不過是InnoDB對文件系統上一個或幾個實際文件的抽象,也就是說我們的數據說到底還是存儲在磁盤上的。但是各位也都知道,磁盤的速度慢的跟烏龜一樣,怎么能配得上“快如風,疾如電”的CPU呢?所以InnoDB存儲引擎在處理客戶端的請求時,當需要訪問某個頁的數據時,就會把完整的頁的數據全部加載到內存中,也就是說即使我們只需要訪問一個頁的一條記錄,那也需要先把整個頁的數據加載到內存中。將整個頁加載到內存中后就可以進行讀寫訪問了,在進行完讀寫訪問之后并不著急把該頁對應的內存空間釋放掉,而是將其緩存起來,這樣將來有請求再次訪問該頁面時,就可以省去磁盤IO的開銷了。
 
  Buffer Pool內部組成
  Buffer Pool中默認的緩存頁大小和在磁盤上默認的頁大小是一樣的,都是16KB。為了更好的管理這些在Buffer Pool中的緩存頁,設計InnoDB的大叔為每一個緩存頁都創建了一些所謂的控制信息,這些控制信息包括該頁所屬的表空間編號、頁號、緩存頁在Buffer Pool中的地址、鏈表節點信息、一些鎖信息以及LSN信息(鎖和LSN我們之后會具體嘮叨,現在可以先忽略),當然還有一些別的控制信息,我們這就不全嘮叨一遍了,挑重要的說嘛~
 
  每個緩存頁對應的控制信息占用的內存大小是相同的,我們就把每個頁對應的控制信息占用的一塊內存稱為一個控制塊吧,控制塊和緩存頁是一一對應的,它們都被存放到 Buffer Pool 中,其中控制塊被存放到 Buffer Pool 的前邊,緩存頁被存放到 Buffer Pool 后邊,所以整個Buffer Pool對應的內存空間看起來就是這樣的:
 
  MySQ的Buffer pool是什么
 
  咦?控制塊和緩存頁之間的那個碎片是個什么玩意兒?你想想啊,每一個控制塊都對應一個緩存頁,那在分配足夠多的控制塊和緩存頁后,可能剩余的那點兒空間不夠一對控制塊和緩存頁的大小,自然就用不到嘍,這個用不到的那點兒內存空間就被稱為碎片了。當然,如果你把Buffer Pool的大小設置的剛剛好的話,也可能不會產生碎片~
 
  小貼士: 每個控制塊大約占用緩存頁大小的5%,在MySQL5.7.21這個版本中,每個控制塊占用的大小是808字節。而我們設置的innodb_buffer_pool_size并不包含這部分控制塊占用的內存空間大小,也就是說InnoDB在為Buffer Pool向操作系統申請連續的內存空間時,這片連續的內存空間一般會比innodb_buffer_pool_size的值大5%左右。
 
  free鏈表的管理
  當我們最初啟動MySQL服務器的時候,需要完成對Buffer Pool的初始化過程,就是先向操作系統申請Buffer Pool的內存空間,然后把它劃分成若干對控制塊和緩存頁。但是此時并沒有真實的磁盤頁被緩存到Buffer Pool中(因為還沒有用到),之后隨著程序的運行,會不斷的有磁盤上的頁被緩存到Buffer Pool中。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖远县| 乌鲁木齐县| 郓城县| 汝州市| 磐安县| 轮台县| 佛教| 武功县| 余干县| 通江县| 都昌县| 新平| 锦州市| 舒城县| 惠安县| 临邑县| 肥城市| 兴国县| 原阳县| 丰原市| 焦作市| 寿光市| 浮梁县| 丁青县| 久治县| 宜昌市| 竹山县| 绍兴县| 白山市| 梧州市| 荥经县| 宾阳县| 新邵县| 大邑县| 南投县| 固阳县| 双鸭山市| 龙江县| 江源县| 宽甸| 荃湾区|