MySQL的查詢緩存和Buffer Pool
一、Caches - 查詢緩存
下圖是MySQL官網(wǎng)給出的:MySQL架構(gòu)體系圖。
人們常說的查詢緩存就是下圖中的Cache部分。
如果將MySQL分成 Server層和存儲(chǔ)引擎層兩大部分,那么Caches位于Server層。
另外你還得知道:
當(dāng)一個(gè)SQL打向MySQL Server之后,MySQL Server首選會(huì)從查詢緩存中查看是否曾經(jīng)執(zhí)行過這個(gè)SQL,如果曾經(jīng)執(zhí)行過的話,之前執(zhí)行的查詢結(jié)果會(huì)以Key-Value的形式保存在查詢緩存中。key是SQL語句,value是查詢結(jié)果。我們將這個(gè)過程稱為查詢緩存!
如果查詢緩存中沒有你要找的數(shù)據(jù)的話,MySQL才會(huì)執(zhí)行后續(xù)的邏輯,通過存儲(chǔ)引擎將數(shù)據(jù)檢索出來。并且查詢緩存會(huì)被shared cache for sessions,是的,它會(huì)被所有的session共享。
查詢緩存的缺點(diǎn):
只要有一個(gè)sql update了該表,那么表的查詢緩存就會(huì)失效。所以當(dāng)你的業(yè)務(wù)對(duì)表CRUD的比例不相上下,那么查詢緩存may be會(huì)影響應(yīng)用的吞吐效率。
你可以通過參數(shù) query_chache_type=demand禁用查詢緩存。并且在mysql8.0的版本中,已經(jīng)將查詢緩存模塊刪除了。
所以,你可以根據(jù)自己的情況考慮一下有沒有必要禁用個(gè)功能
二、Buffer Pool
還是那句話:如果將MySQL分成 Server層和存儲(chǔ)引擎層兩大部分,那么Buffer Pool位于存儲(chǔ)引擎層。
其實(shí)大家都知道無論是連接池也好、緩存池也好,只要是XXX池,都是為加速而設(shè)計(jì)的。比如操作系統(tǒng)的文件系統(tǒng)為了加快數(shù)據(jù)的讀取速度,每次都做低效率的磁盤隨機(jī)IO設(shè)計(jì)了緩沖寫機(jī)制。
而Buffer Pool就是MySQL存儲(chǔ)引擎為了加速數(shù)據(jù)的讀取速度而設(shè)計(jì)的緩沖機(jī)制。下圖中的灰色部分就是BufferPool的腦圖。(字是真跡,非常之秀氣?。?/p>
以上就是MySQL的查詢緩存和Buffer Pool的詳細(xì)內(nèi)容,更多關(guān)于MySQL 查詢緩存和Buffer Pool的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文搞懂MySQL XA如何實(shí)現(xiàn)分布式事務(wù)
MySQL如何實(shí)現(xiàn)多個(gè)MySQL數(shù)據(jù)庫更新的一致性呢?那就是MySQL XA,本文就來介紹一下MySQL XA如何實(shí)現(xiàn)分布式事務(wù),具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11mysql 5.7.17 安裝配置方法圖文教程(windows10)
這篇文章主要為大家分享了mysql 5.7.17 安裝配置方法圖文教程,具有一定的參考價(jià)值,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01將MySQL數(shù)據(jù)導(dǎo)出為sql文件的最佳實(shí)踐
這篇文章主要給大家介紹了如何將MySQL數(shù)據(jù)導(dǎo)出為sql文件,避免數(shù)據(jù)丟失的最佳實(shí)踐,文中有詳細(xì)的導(dǎo)出流程步驟,跟著文中的步驟就可以導(dǎo)出文件,需要的朋友可以借鑒參考2023-07-07MySQL學(xué)習(xí)之基礎(chǔ)操作總結(jié)
MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在WEB應(yīng)用方面 MySQL 是最好的。本文將為大家詳細(xì)介紹一下MySQL的基礎(chǔ)操作,需要的可以參考一下2022-03-03