全部產品
Search
文件中心

ApsaraDB RDS:RDS MySQL查詢快取(Query Cache)的設定和使用

更新時間:Jun 08, 2024

功能和適用範圍

功能:

  • 降低CPU使用率。
  • 降低IOPS使用率(某些情況下)。
  • 減少查詢回應時間,提高系統的輸送量。

適用範圍:

  • 表資料修改不頻繁、資料較靜態。
  • 查詢(Select)重複度高。
  • 查詢結果集小於 1 MB。
說明 查詢快取並不一定帶來效能上的提升,在某些情況下(比如查詢數量大,但重複的查詢很少)開啟查詢快取會帶來效能的下降。

原理

RDS MySQL對來自用戶端的查詢(Select)進行Hash計算得到該查詢的Hash值,通過該Hash值到查詢快取中匹配該查詢的結果。

如果匹配(命中),則將查詢的結果集直接返回給用戶端,不必再解析、執行查詢。

如果沒有匹配(命中),則將Hash值和結果集儲存在查詢快取中,以便以後使用。

查詢涉及的任何一個表中資料發生變化,RDS MySQL將查詢快取中所有與該表相關的查詢結果集全部釋放(刪除)。

限制

  • 查詢必須嚴格一致(大小寫、空格、使用的資料庫、協議版本、字元集等必須一致)才可以命中,否則視為不同查詢。
  • 不緩衝查詢中的子查詢結果集,僅緩衝查詢最終結果集。
  • 不緩衝儲存函數(Stored Function)、預存程序(Stored Procedure)、觸發器(Trigger)、事件(Event)中的查詢。
  • 不緩衝含有每次執行結果變化的函數的查詢,比如now()、curdate()、last_insert_id()、rand()等。
  • 不緩衝對mysql、information_schema、performance_schema系統資料庫表的查詢。
  • 不緩衝使用暫存資料表的查詢。
  • 不緩衝產生警示(Warnings)的查詢。
  • 不緩衝Select … lock in share mode、Select … for update、 Select * from … where autoincrement_col is NULL類型的查詢。
  • 不緩衝使用使用者定義變數的查詢。
  • 不緩衝使用Hint - SQL_NO_CACHE的查詢。

設定

  • 參數設定

    控制台參數設定如下。

    • query_cache_limit(單位:byte):查詢快取中可存放的單條查詢最大結果集,預設為 1 MB;超過該大小的結果集不被緩衝。

    • query_cache_size(單位:byte):查詢快取的大小,預設為 3 MB。

    • query_cache_type:是否開啟查詢快取功能。

      取值為 0 :關閉查詢功能。

      取值為 1 :開啟查詢快取功能,但不緩衝Select SQL_NO_CACHE開頭的查詢。

      取值為 2 :開啟查詢快取功能,但僅緩衝Select SQL_CACHE開頭的查詢。

    重要
    • 修改query_cache_type需要重啟執行個體(修改後執行個體會自動重啟)。
    • 參數query_cache_size要求設定值為1024的整數倍,否則會提示指定參數無效
  • 開啟

    參數query_cache_size大於0並且query_cache_type設定為1或者2的情況下,查詢快取開啟。

  • 關閉

    設定參數query_cache_size為0或者設定query_cache_type為0關閉查詢快取。

  • 建議
    • query_cache_size不建議設定的過大。過大的空間不但擠占執行個體其他記憶體結構的空間,而且會增加在緩衝中搜尋的開銷。建議根據執行個體規格,初始值設定為10MB到100 MB之間的值,而後根據運行使用方式調整。
    • 建議通過調整query_cache_size的值來開啟、關閉查詢快取,因為修改query_cache_type參數需要重啟執行個體生效。
    • 查詢快取適用於特定的情境,建議充分測試後,再考慮開啟,避免引起效能下降或引入其他問題。

驗證效果

  • 控制台
  • SQL命令

    可以通過如下命令來擷取查詢快取的使用狀態。

    show global status like ‘Qca%’;
    • Qcache_hits:查詢快取叫用次數。

    • Qcache_inserts:將查詢和結果集寫入到查詢快取中的次數。

    • Qcache_not_cached:不可以緩衝的查詢次數。

    • Qcache_queries_in_cache:查詢快取中緩衝的查詢量。