电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解MySQL中的緩沖池(buffer pool)

瀏覽:7日期:2023-10-06 17:28:29

Mysql 中數據是要落盤的,這點大家都知道。讀寫磁盤速度是很慢的,尤其和內存比起來更是沒的說。但是,我們平時在執行 SQL 時,無論寫操作還是讀操作都能很快得到結果,并沒有預想中的那么慢。

可能你會說我有索引啊,有索引當然快了。但是鐵子,索引文件也是存儲在磁盤上的,查找過程會產生磁盤 I/O。如果同時對某行數據進行多次操作,那豈不是要重復產生很多次磁盤 IO 嗎?

可能你想到了,那我把數據存在內存里不就可以了嗎?內存速度比磁盤快,這準沒毛病。沒錯,那該怎么存呢? 這就是我們今天所要講的主題——緩沖池(buffer pool)。

各位看官,請跟我來~

詳解MySQL中的緩沖池(buffer pool)

圖注:思維導圖

初識緩沖池

上邊我們提到過了,執行 SQL 對某一行進行操作時,總不能每次都直接進行磁盤操作吧。好歹有個緩沖地帶,不然每次都深入老巢這誰受得了。

這不緩沖池就應運而生了,簡單來說就是一塊內存區域。它存在的原因之一是為了避免每次都去訪問磁盤,把最常訪問的數據放在緩存里,提高數據的訪問速度。

了解了它的作用,接下來讓我們先來看下緩沖池在整個 Mysql 架構里處于什么樣的地方,有一個宏觀的認識。

詳解MySQL中的緩沖池(buffer pool)

我們再來看看它的內部組成部分。在緩沖池中,除數據頁和索引頁外還有多種類型:

詳解MySQL中的緩沖池(buffer pool)

緩沖池的應用

緩沖池你也了解了,可能此時你最關注的是它在 SQL 執行時起了一個什么樣的作用。上篇文章中我們簡單的提到過一條 SQL 語句的執行過程,但并未涉及到緩沖池相關的問題。這期我們仍是以一條 SQL 來作為切入點。

當一條 SQL 執行的時候,如果是讀操作,要查找的數據所在的數據頁在內存中時,則將結果返回。否則會把對應的數據頁加載到內存中,然后再返回結果。

同樣對于寫操作來說。如果要修改的行所在的數據頁在內存中,則修改后返回對應的結果(當然還有后續操作)。如果不在的話,則會從磁盤里將該行所對應的數據頁讀到內存中再進行修改。

好了,現在讓我們回到開始時候的問題。為什么操作磁盤慢,但是 SQL 執行卻不慢呢。到這里相信你也差不多知道了吧。

緩沖池的存在,很大程度減少了磁盤 I/O 帶來的開銷。要操作的數據行所在的數據頁如果存在于緩存中的話,就不需要從磁盤中進行讀取。這樣在執行后就可以很快拿到結果。

緩沖池的預讀機制

我們可以看出來,只要不存在或減少磁盤 I/O,執行速度自然就會變快。那么對于加載數據頁這種無法避免的磁盤 I/O 來說是否有更好的方式呢?既然避免不了,那減少磁盤 I/O 的次數總可以吧?

這就是我們要講的 Mysql 中「預讀」的新特性,它是 Innodb 通過在緩沖池中提前讀取多個數據頁來優化 I/O 的一種方式。因為磁盤讀寫的時候,是按照頁的方式來讀取的(你可以理解為固定大小的數據,例如一頁數據為 16K),每次至少讀入一頁的數據,如果下次讀取的數據就在頁中,就不用再去磁盤上讀取了,從而減少了磁盤 I/O。

可以在命令行通過如下命令查看對應的頁大小:

詳解MySQL中的緩沖池(buffer pool)

緩沖池的空間管理

你可能會有疑問,緩沖池這么洋氣的東西,為什么不把所有的數據都放到緩沖池里呢?這樣速度豈不是美滋滋,放到磁盤里慢的跟老牛拉車一樣。

哎,哥,醒醒,拋開內存的易失性不談,緩沖池也是有大小限制的。那你可能又有疑惑了,既然緩沖池有大小限制,那我每次都讀入的數據頁怎么來管理呢。別的數據頁都占了地兒了,哪有我的位置?

這里我們來聊聊緩沖池的空間管理,其實對緩沖池進行管理的關鍵部分是如何安排進池的數據并且按照一定的策略淘汰池中的數據,保證池中的數據不“溢出”,同時還能保證常用數據留在池子中。

詳解MySQL中的緩沖池(buffer pool)

傳統 LRU 淘汰法

緩沖池是基于傳統的 LRU 方法來進行緩存頁管理的,我們先來看下如果使用 LRU 是如何管理的。

LRU,全稱是 Least Recently Used,中文名字叫作「最近最少使用」。從名字上就很容易理解了。

這里分兩種情況:

(1)緩存頁已在緩沖池中

這種情況下會將對應的緩存頁放到 LRU 鏈表的頭部,無需從磁盤再進行讀取,也無需淘汰其它緩存頁。

如下圖所示,如果要訪問的數據在 6 號頁中,則將 6 號頁放到鏈表頭部即可,這種情況下沒有緩存頁被淘汰。

詳解MySQL中的緩沖池(buffer pool)

(2)緩存頁不在緩沖池中

緩存頁不在緩沖中,這時候就需要從磁盤中讀入對應的數據頁,將其放置在鏈表頭部,同時淘汰掉末尾的緩存頁

如下圖所示,如果要訪問的數據在 60 號頁中,60 號頁不在緩沖池中,此時加載進來放到鏈表的頭部,同時淘汰掉末尾的 17 號緩存頁。

詳解MySQL中的緩沖池(buffer pool)

是不是看上去很簡單,同時也能滿足緩沖池淘汰緩存頁的方法?但是我們來思考幾個問題:

預讀失效

上面我們提到了緩沖池的預讀機制可能會預先加載相鄰的數據頁。假如加載了 20、21 相鄰的兩個數據頁,如果只有頁號為 20 的緩存頁被訪問了,而另一個緩存頁卻沒有被訪問。此時兩個緩存頁都在鏈表的頭部,但是為了加載這兩個緩存頁卻淘汰了末尾的緩存頁,而被淘汰的緩存頁卻是經常被訪問的。這種情況就是預讀失效,被預先加載進緩沖池的頁,并沒有被訪問到,這種情況是不是很不合理。

緩沖池污染 還有一種情況是當執行一條 SQL 語句時,如果掃描了大量數據或是進行了全表掃描,此時緩沖池中就會加載大量的數據頁,從而將緩沖池中已存在的所有頁替換出去,這種情況同樣是不合理的。這就是緩沖池污染,并且還會導致 MySQL 性能急劇下降。

冷熱數據分離

這樣看來,傳統的 LRU 方法并不能滿足緩沖池的空間管理。因此,Msyql 基于 LRU 設計了冷熱數據分離的處理方案。

也就是將 LRU 鏈表分為兩部分,一部分為熱數據區域,一部分為冷數據區域。

詳解MySQL中的緩沖池(buffer pool)

當數據頁第一次被加載到緩沖池中的時候,先將其放到冷數據區域的鏈表頭部,1s(由 innodb_old_blocks_time 參數控制) 后該緩存頁被訪問了再將其移至熱數據區域的鏈表頭部。

詳解MySQL中的緩沖池(buffer pool)

可能你會有疑惑了,為什么要等 1s 后才將其移至熱數據區域呢?你想想,如果數據頁剛被加載到冷數據區就被訪問了,之后再也不訪問它了呢?這不就造成熱數據區的浪費了嗎?要是 1s 后不訪問了,說明之后可能也不會去頻繁訪問它,也就沒有移至熱緩沖區的必要了。當緩存頁不夠的時候,從冷數據區淘汰它們就行了。

另一種情況,當我的數據頁已經在熱緩沖區了,是不是緩存頁只要被訪問了就將其插到鏈表頭部呢?不用我說你肯定也覺得不合理。熱數據區域里的緩存頁是會被經常訪問的,如果每訪問一個緩存頁就插入一次鏈表頭,那整個熱緩沖區里就異常騷動了,你想想那個畫面。

那咋整呢?Mysql 中優化為熱數據區的后 3/4 部分被訪問后才將其移動到鏈表頭部去,對于前 1/4 部分的緩存頁被訪問了不會進行移動。

好了,到這里關于 buffer pool 的知識就講完了。這期里我們講了 buffer pool 能使 SQL 執行變快的原因,同時還講了有關 buffer pool 空間的管理方式。歡迎在留言區里進行討論。

總結 緩沖池的應用

緩沖池很大程度減少了磁盤 I/O 帶來的開銷,通過將操作的數據行所在的數據頁加載到緩沖池可以提高 SQL 的執行速度。

緩沖池的預讀機制

為了減少磁盤 I/O,Innodb 通過在緩沖池中提前讀取多個數據頁來進行優化,這種方式叫作預讀。

緩沖池的空間管理 傳統的LRU方法對于緩沖池來說,會導致預讀失效和緩沖池污染兩種情況,因此這種傳統的方式并不適用緩沖池的空間管理。 基于對 LRU 方法的優化,Msyql 設計了冷熱數據分離的處理方案,將LRU鏈表分為熱數據區和冷數據區兩部分,這樣就可以解決預讀失效和緩沖池污染的情況。

以上就是詳解MySQL中的緩沖池(buffer pool)的詳細內容,更多關于MySQL 緩沖池(buffer pool)的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 联系我们-腾龙公司上分客服微信19116098882 | 数字展示在线_数字展示行业门户网站| 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 陕西安玻璃自动感应门-自动重叠门-磁悬浮平开门厂家【捷申达门业】 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | 求是网 - 思想建党 理论强党 | 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 抓斗式清污机|螺杆式|卷扬式启闭机|底轴驱动钢坝|污水处理闸门-方源水利机械 | 中药二氧化硫测定仪,食品二氧化硫测定仪|俊腾百科 | 企业VI设计_LOGO设计公司_品牌商标设计_【北京美研】 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 据信,上课带着跳 D 体验-别样的课堂刺激感受引发网友热议 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 不锈钢螺丝,不锈钢螺栓,不锈钢标准件-江苏百德特种合金有限公司 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 全自动变压器变比组别测试仪-手持式直流电阻测试仪-上海来扬电气 | 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 成人纸尿裤,成人尿不湿,成人护理垫-山东康舜日用品有限公司 | 宝宝药浴-产后药浴-药浴加盟-艾裕-专注母婴调养泡浴 | 翅片管换热器「型号全」_厂家-淄博鑫科环保 | 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 洗瓶机厂家-酒瓶玻璃瓶冲瓶机-瓶子烘干机-封口旋盖压盖打塞机_青州惠联灌装机械 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 防水套管厂家-柔性防水套管-不锈钢|刚性防水套管-天翔管道 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 汝成内控-行政事业单位内部控制管理服务商| 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 亿诺千企网-企业核心产品贸易 | 通辽信息港 - 免费发布房产、招聘、求职、二手、商铺等信息 www.tlxxg.net | 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | 三效蒸发器_多效蒸发器价格_四效三效蒸发器厂家-青岛康景辉 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 |