MySQL的查詢緩存和Buffer Pool
一、Caches - 查詢緩存
下圖是MySQL官網(wǎng)給出的:MySQL架構(gòu)體系圖。
人們常說的查詢緩存就是下圖中的Cache部分。
如果將MySQL分成 Server層和存儲引擎層兩大部分,那么Caches位于Server層。
另外你還得知道:
當一個SQL打向MySQL Server之后,MySQL Server首選會從查詢緩存中查看是否曾經(jīng)執(zhí)行過這個SQL,如果曾經(jīng)執(zhí)行過的話,之前執(zhí)行的查詢結(jié)果會以Key-Value的形式保存在查詢緩存中。key是SQL語句,value是查詢結(jié)果。我們將這個過程稱為查詢緩存!
如果查詢緩存中沒有你要找的數(shù)據(jù)的話,MySQL才會執(zhí)行后續(xù)的邏輯,通過存儲引擎將數(shù)據(jù)檢索出來。并且查詢緩存會被shared cache for sessions,是的,它會被所有的session共享。
查詢緩存的缺點:
只要有一個sql update了該表,那么表的查詢緩存就會失效。所以當你的業(yè)務(wù)對表CRUD的比例不相上下,那么查詢緩存may be會影響應(yīng)用的吞吐效率。
你可以通過參數(shù) query_chache_type=demand禁用查詢緩存。并且在mysql8.0的版本中,已經(jīng)將查詢緩存模塊刪除了。
所以,你可以根據(jù)自己的情況考慮一下有沒有必要禁用個功能
二、Buffer Pool
還是那句話:如果將MySQL分成 Server層和存儲引擎層兩大部分,那么Buffer Pool位于存儲引擎層。
其實大家都知道無論是連接池也好、緩存池也好,只要是XXX池,都是為加速而設(shè)計的。比如操作系統(tǒng)的文件系統(tǒng)為了加快數(shù)據(jù)的讀取速度,每次都做低效率的磁盤隨機IO設(shè)計了緩沖寫機制。
而Buffer Pool就是MySQL存儲引擎為了加速數(shù)據(jù)的讀取速度而設(shè)計的緩沖機制。下圖中的灰色部分就是BufferPool的腦圖。(字是真跡,非常之秀氣!)
以上就是MySQL的查詢緩存和Buffer Pool的詳細內(nèi)容,更多關(guān)于MySQL 查詢緩存和Buffer Pool的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 數(shù)據(jù)庫相關(guān)的幾個技能:ACCESS轉(zhuǎn)SQL2. Oracle 11g透明數(shù)據(jù)加密安全特性解析3. MySQL 性能、監(jiān)控與災(zāi)難恢復(fù)4. Mysql故障排除:Starting MySQL. ERROR! Manager of pid-file quit without updating file5. 快速刪除ORACLE重復(fù)記錄6. mysql innodb的重要組件匯總7. 兩個有用的oracle數(shù)據(jù)庫運算:intersect和minus運算8. MySQL基礎(chǔ)教程2 —— 數(shù)據(jù)類型之日期和時間類型9. MySQL性能壓力基準測試工具sysbench的使用簡介10. DB2新手使用的一些小筆記:新建實例、數(shù)據(jù)庫路徑不存在、客戶端連接 .
