首發地址:點擊跳轉閱讀原文,有更好的閱讀體驗
使用推薦閱讀,有更好的閱讀體驗!
一、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的腦圖。(字是真跡,非常之秀氣!)
三、推薦閱讀
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面試題的狂轟濫炸!當然也不乏會分享一些高階讀寫分離數據庫中間件原理及落地的技術實現,為你揭開數據庫中間件神秘的面紗!
面試官都關注了!你還在猶豫什么呢?
推薦閱讀
- 大家常說的基數是什么?(已發布)
- 講講什么是慢查!如何監控?如何排查?(已發布)
- 對NotNull字段插入Null值有啥現象?(已發布)
- 能談談 date、datetime、time、timestamp、year的區別嗎?(已發布)
- 了解數據庫的查詢緩存和BufferPool嗎?談談看!(已發布)
- 你知道數據庫緩沖池中的LRU-List嗎?(已發布)
- 談談數據庫緩沖池中的Free-List?(已發布)
- 談談數據庫緩沖池中的Flush-List?(已發布)
- 了解臟頁刷回磁盤的時機嗎?(已發布)
- 用十一張圖講清楚,當你CRUD時BufferPool中發生了什么!以及BufferPool的優化!(已發布)
- 聽說過表空間沒?什么是表空間?什么是數據表?(已發布)
- 談談MySQL的:數據區、數據段、數據頁、數據頁究竟長什么樣?了解數據頁分裂嗎?談談看!(已發布)
- 談談MySQL的行記錄是什么?長啥樣?(已發布)
- 了解MySQL的行溢出機制嗎?(已發布)
- 說說fsync這個系統調用吧! (已發布)
- 簡述undo log、truncate、以及undo log如何幫你回滾事物! (已發布)
- 我勸!這位年輕人不講MVCC,耗子尾汁! (已發布)
- MySQL的崩潰恢復到底是怎么回事? (已發布)
- MySQL的binlog有啥用?誰寫的?在哪里?怎么配置 (已發布)
- MySQL的bin log的寫入機制 (已發布)
面試官都關注了!你還在猶豫什么呢?