面試題:你有沒有搞混查詢快取和Buffer Pool?談談看!

賜我白日夢發表於2020-11-15

首發地址:點選跳轉閱讀原文,有更好的閱讀體驗

使用推薦閱讀,有更好的閱讀體驗!

一、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的腦圖。(字是真跡,非常之秀氣!)

buffer


三、推薦閱讀

1、談談MySQL中基數是什麼?

2、聊聊什麼是慢查?如何監控?如何排查?

3、對Not Null欄位插入Null值有啥現象?

4、能談談year、date、datetime、time、timestamp的區別嗎?


四、彩蛋

關注我!一起面向面試學MySQL!

下一篇文章白日夢將同你分享另一個話題:“你知道BufferPool中的LRUList嗎?談談看!”


參考:

https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool.html

https://lalitvc.wordpress.com/2016/11/03/mysql-architecture-and-components/


五、專題介紹

專題免費!!!

為大家帶來MySQL面試專題!本文是第 5 篇、全文110篇!公眾號首發!

以問答的方式,由淺入深的幫你應對各類MySQL面試題的狂轟濫炸!當然也不乏會分享一些高階讀寫分離資料庫中介軟體原理及落地的技術實現,為你揭開資料庫中介軟體神祕的面紗!

面試官都關注了!你還在猶豫什麼呢?

image-20201111055731223

關注送書!《Netty實戰》


文章公號號首發!連載中!關注微信公號回覆:“抽獎” 可參加抽?活動

相關文章