最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

12 Buffer Pool這個內(nèi)存數(shù)據(jù)結構到底長個什么樣子?

2023-06-14 12:37 作者:儒猿課堂  | 我要投稿

Buffer Pool這個內(nèi)存數(shù)據(jù)結構到底長個什么樣子?


1、如何配置你的Buffer Pool的大小?


首先我們來看看,我們應該如何配置你的Buffer Pool到底有多大呢?


因為Buffer Pool本質其實就是數(shù)據(jù)庫的一個內(nèi)存組件,你可以理解為他就是一片內(nèi)存數(shù)據(jù)結構,所以這個內(nèi)存數(shù)據(jù)結構肯定是有一定的大小的,不可能是無限大的。


這個Buffer Pool默認情況下是128MB,還是有一點偏小了,我們實際生產(chǎn)環(huán)境下完全可以對Buffer Pool進行調(diào)整。


比如我們的數(shù)據(jù)庫如果是16核32G的機器,那么你就可以給Buffer Pool分配個2GB的內(nèi)存,使用下面的配置就可以了。


[server]

innodb_buffer_pool_size = 2147483648


如果有的朋友不知道數(shù)據(jù)庫的配置文件在哪里以及如何修改其中的配置,那建議可以先在網(wǎng)上搜索一些MySQL入門的資料去看看,其實這都是最基礎和簡單的。


我們先來看一下下面的圖,里面就畫了數(shù)據(jù)庫中的Buffer Pool內(nèi)存組件。

? ? ? ? ? ?

? ? ?

2、數(shù)據(jù)頁:MySQL中抽象出來的數(shù)據(jù)單位


接著我們來看下一個問題,假設現(xiàn)在我們的數(shù)據(jù)庫中一定有一片內(nèi)存區(qū)域是Buffer Pool了,那么我們的數(shù)據(jù)是如何放在Buffer Pool中的?


我們都知道數(shù)據(jù)庫的核心數(shù)據(jù)模型就是表+字段+行的概念,也就是說我們都知道數(shù)據(jù)庫里有一個一個的表,一個表有很多字段,然后一個表里有很多行數(shù)據(jù),每行數(shù)據(jù)都有自己的字段值。所以大家覺得我們的數(shù)據(jù)是一行一行的放在Buffer Pool里面的嗎?


這就明顯不是了,實際上MySQL對數(shù)據(jù)抽象出來了一個數(shù)據(jù)頁的概念,他是把很多行數(shù)據(jù)放在了一個數(shù)據(jù)頁里,也就是說我們的磁盤文件中就是會有很多的數(shù)據(jù)頁,每一頁數(shù)據(jù)里放了很多行數(shù)據(jù),如下圖所示。

? ? ? ? ? ?

? ? ? ? ? ? ?

所以實際上假設我們要更新一行數(shù)據(jù),此時數(shù)據(jù)庫會找到這行數(shù)據(jù)所在的數(shù)據(jù)頁,然后從磁盤文件里把這行數(shù)據(jù)所在的數(shù)據(jù)頁直接給加載到Buffer Pool里去


也就是說,Buffer Pool中存放的是一個一個的數(shù)據(jù)頁,如下圖。

? ? ? ? ? ?

? ? ? ? ? ? ?

3、磁盤上的數(shù)據(jù)頁和Buffer Pool中的緩存頁是如何對應起來的?


實際上默認情況下,磁盤中存放的數(shù)據(jù)頁的大小是16KB,也就是說,一頁數(shù)據(jù)包含了16KB的內(nèi)容。


而Buffer Pool中存放的一個一個的數(shù)據(jù)頁,我們通常叫做緩存頁,因為畢竟Buffer Pool是一個緩沖池,里面的數(shù)據(jù)都是從磁盤緩存到內(nèi)存去的。


而Buffer Pool中默認情況下,一個緩存頁的大小和磁盤上的一個數(shù)據(jù)頁的大小是一一對應起來的,都是16KB。


所以我們看下圖,我給圖中的Buffer Pool標注出來了他的內(nèi)存大小,假設他是128MB吧,然后數(shù)據(jù)頁的大小是16KB。

? ? ? ? ? ?

? ? ? ? ? ? ?

4、緩存頁對應的描述信息是什么?


接著我們要了解下一個概念,對于每個緩存頁,他實際上都會有一個描述信息,這個描述信息大體可以認為是用來描述這個緩存頁的


比如包含如下的一些東西:這個數(shù)據(jù)頁所屬的表空間、數(shù)據(jù)頁的編號、這個緩存頁在Buffer Pool中的地址以及別的一些雜七雜八的東西。


每個緩存頁都會對應一個描述信息,這個描述信息本身也是一塊數(shù)據(jù),在Buffer Pool中,每個緩存頁的描述數(shù)據(jù)放在最前面,然后各個緩存頁放在后面


所以此時我們看下面的圖,Buffer Pool實際看起來大概長這個樣子。

? ? ? ? ? ?

? ? ? ? ? ? ?

而且這里我們要注意一點,Buffer Pool中的描述數(shù)據(jù)大概相當于緩存頁大小的5%左右,也就是每個描述數(shù)據(jù)大概是800個字節(jié)左右的大小,然后假設你設置的buffer pool大小是128MB,實際上Buffer Pool真正的最終大小會超出一些,可能有個130多MB的樣子,因為他里面還要存放每個緩存頁的描述數(shù)據(jù)。


5、今日思考題


今天想留給大家思考一個問題,就是內(nèi)存碎片的問題


大家可以想象一下,對于Buffer Pool而言,他里面會存放很多的緩存頁以及對應的描述數(shù)據(jù),那么假設Buffer Pool里的內(nèi)存都用盡了,已經(jīng)沒有足夠的剩余內(nèi)存來存放緩存頁和描述數(shù)據(jù)了,此時Buffer Pool里就一點內(nèi)存都沒有了嗎?還是說Buffer Pool里會殘留一些內(nèi)存碎片呢?


如果你覺得Buffer Pool里會有內(nèi)存碎片的話,那么你覺得應該怎么做才能盡可能減少Buffer Pool里的內(nèi)存碎片呢?


請大家在評論區(qū)給出自己的思考,另外多跟其他人在評論區(qū)里交流。

End

專欄版權歸公眾號儒猿技術窩所有

未經(jīng)許可不得傳播,如有侵權將追究法律責任

12 Buffer Pool這個內(nèi)存數(shù)據(jù)結構到底長個什么樣子?的評論 (共 條)

分享到微博請遵守國家法律
韶关市| 青田县| 会东县| 拜泉县| 通榆县| 南靖县| 闵行区| 云龙县| 宁安市| 黔西县| 伊金霍洛旗| 辽阳县| 西藏| 阿鲁科尔沁旗| 天长市| 台北县| 宝山区| 盖州市| 宣恩县| 封开县| 台江县| 白水县| 淳安县| 固镇县| 开平市| 岳普湖县| 大城县| 高陵县| 阳原县| 汉中市| 本溪| 恭城| 介休市| 安宁市| 洛南县| 报价| 桂平市| 崇州市| 江油市| 黎平县| 丹江口市|