1. 程式人生 > 資料庫 >MySQL的查詢快取和Buffer Pool

MySQL的查詢快取和Buffer Pool

一、Caches - 查詢快取

下圖是MySQL官網給出的:MySQL架構體系圖。

人們常說的查詢快取就是下圖中的Cache部分。

如果將MySQL分成 Server層和儲存引擎層兩大部分,那麼Caches位於Server層。

MySQL的查詢快取和Buffer Pool

另外你還得知道:

當一個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的版本中,已經將查詢快取模組刪除了。

所以,你可以根據自己的情況考慮一下有沒有必要禁用個功能

MySQL的查詢快取和Buffer Pool

二、Buffer Pool

還是那句話:如果將MySQL分成 Server層和儲存引擎層兩大部分,那麼Buffer Pool位於儲存引擎層。

其實大家都知道無論是連線池也好、快取池也好,只要是XXX池,都是為加速而設計的。比如作業系統的檔案系統為了加快資料的讀取速度,每次都做低效率的磁碟隨機IO設計了緩衝寫機制。

MySQL的查詢快取和Buffer Pool

而Buffer Pool就是MySQL儲存引擎為了加速資料的讀取速度而設計的緩衝機制。下圖中的灰色部分就是BufferPool的腦圖。(字是真跡,非常之秀氣!)

以上就是MySQL的查詢快取和Buffer Pool的詳細內容,更多關於MySQL 查詢快取和Buffer Pool的資料請關注我們其它相關文章!