面試題:你有沒有搞混查詢緩存和Buffer Pool?談談看!
首發地址:點擊跳轉閱讀原文,有更好的閱讀體驗
使用推薦閱讀,有更好的閱讀體驗!
一、Caches – 查詢緩存
下圖是MySQL官網給出的:MySQL架構體系圖。
人們常說的查詢緩存就是下圖中的Cache部分。
如果將MySQL分成 Server層和存儲引擎層兩大部分,那麼Caches位於Server層。
另外你還得知道:
當一個SQL打向MySQL Server之後,MySQL Server首選會從查詢緩存中查看是否曾經執行過這個SQL,如果曾經執行過的話,之前執行的查詢結果會以Key-Value的形式保存在查詢緩存中。key是SQL語句,value是查詢結果。我們將這個過程稱為查詢緩存!
如果查詢緩存中沒有你要找的數據的話,MySQL才會執行後續的邏輯,通過存儲引擎將數據檢索出來。並且查詢緩存會被shared cache for sessions,是的,它會被所有的session共享。
查詢緩存的缺點:
只要有一個sql update了該表,那麼表的查詢緩存就會失效。所以當你的業務對錶CRUD的比例不相上下,那麼查詢緩存may be會影響應用的吞吐效率。
你可以通過參數 query_chache_type=demand
禁用查詢緩存。並且在mysql8.0的版本中,已經將查詢緩存模塊刪除了。
所以,你可以根據自己的情況考慮一下有沒有必要禁用個功能
二、Buffer Pool
還是那句話:如果將MySQL分成 Server層和存儲引擎層兩大部分,那麼Buffer Pool位於存儲引擎層。
其實大家都知道無論是連接池也好、緩存池也好,只要是XXX池,都是為加速而設計的。比如操作系統的文件系統為了加快數據的讀取速度,每次都做低效率的磁盤隨機IO設計了緩衝寫機制。
關注我,白日夢將在本專題系列文章中的第 18 篇文章中跟你介紹相關的系統調用 。
而Buffer Pool就是MySQL存儲引擎為了加速數據的讀取速度而設計的緩衝機制。下圖中的灰色部分就是BufferPool的腦圖。(字是真跡,非常之秀氣!)
還是那句話:如果將MySQL分成 Server層和存儲引擎層兩大部分,那麼Buffer Pool位於存儲引擎層。
其實大家都知道無論是連接池也好、緩存池也好,只要是XXX池,都是為加速而設計的。比如操作系統的文件系統為了加快數據的讀取速度,每次都做低效率的磁盤隨機IO設計了緩衝寫機制。
關注我,白日夢將在本專題系列文章中的第 18 篇文章中跟你介紹相關的系統調用 。
而Buffer Pool就是MySQL存儲引擎為了加速數據的讀取速度而設計的緩衝機制。下圖中的灰色部分就是BufferPool的腦圖。(字是真跡,非常之秀氣!)
三、推薦閱讀
4、能談談year、date、datetime、time、timestamp的區別嗎?
四、彩蛋
關注我!一起面向面試學MySQL!
下一篇文章白日夢將同你分享另一個話題:「你知道BufferPool中的LRUList嗎?談談看!」
參考:
//dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool.html
//lalitvc.wordpress.com/2016/11/03/mysql-architecture-and-components/
五、專題介紹
專題免費!!!掃碼關注微信公共號回復:」抽獎「 即可參與!
為大家帶來MySQL面試專題!本文是第 5 篇、全文110篇!公眾號首發!
以問答的方式,由淺入深的幫你應對各類MySQL面試題的狂轟濫炸!當然也不乏會分享一些高階讀寫分離數據庫中間件原理及落地的技術實現,為你揭開數據庫中間件神秘的面紗!
面試官都關注了!你還在猶豫什麼呢?
關注送書!《Netty實戰》
文章公號號首發!連載中!關注微信公號回復:「抽獎」 可參加抽📖活動