1. 程式人生 > 資料庫 >MySQL取消了Query Cache的原因

MySQL取消了Query Cache的原因

MySQL之前有一個查詢快取Query Cache,從8.0開始,不再使用這個查詢快取,那麼放棄它的原因是什麼呢?在這一篇裡將為您介紹。

MySQL查詢快取是查詢結果快取。它將以SEL開頭的查詢與雜湊表進行比較,如果匹配,則返回上一次查詢的結果。進行匹配時,查詢必須逐位元組匹配,例如 SELECT * FROM t1; 不等於select * from t1;,此外,一些不確定的查詢結果無法被快取,任何對錶的修改都會導致這些表的所有快取無效。因此,適用於查詢快取的最理想的方案是隻讀,特別是需要檢查數百萬行後僅返回數行的複雜查詢。如果你的查詢符合這樣一個特點,開啟查詢快取會提升你的查詢效能。

隨著技術的進步,經過時間的考驗,MySQL的工程團隊發現啟用快取的好處並不多。

首先,查詢快取的效果取決於快取的命中率,只有命中快取的查詢效果才能有改善,因此無法預測其效能。

其次,查詢快取的另一個大問題是它受到單個互斥鎖的保護。在具有多個核心的伺服器上,大量查詢會導致大量的互斥鎖爭用。

通過基準測試發現,大多數工作負載最好禁用查詢快取(5.6的預設設定):query_cache_type = 0

MySQL取消了Query Cache的原因

如果你認為會從查詢快取中獲得好處,請按照實際情況進行測試。

  • 資料寫的越多,好處越少
  • 緩衝池中容納的資料越多,好處越少
  • 查詢越複雜,掃描範圍越大,則越受益

MySQL8.0取消查詢快取的另外一個原因是,研究表明,快取越靠近客戶端,獲得的好處越大。關於這份研究請參考https://proxysql.com/blog/scaling-with-proxysql-query-cache/

下圖源自上面的網址:

MySQL取消了Query Cache的原因

除此之外,MySQL8.0新增加了對性能干預的工具,例如,現在可以利用查詢重寫外掛,在不更改應用程式的同時,插入優化器提示語句。另外,還有像ProxySQL這樣的第三方工具,它們可以充當中間快取。

綜合以上原因,MySQL8.0不再提供對查詢快取的支援,如果使用者從5.7版本升級至8.0,考慮使用查詢重寫或其他快取。

全文完。

以上就是MySQL取消了Query Cache的原因的詳細內容,更多關於MySQL Query Cache的資料請關注我們其它相關文章!