功能和適用範圍
功能:
降低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_limit(取值範圍 1~1048576)和query_cache_size(取值範圍 0~104857600)等相關參數,單擊參數右側的資訊表徵圖可查看參數詳細說明。
重要修改query_cache_type需要重啟執行個體(修改後執行個體會自動重啟)。
參數query_cache_size要求設定值為1024的整數倍,否則會提示指定參數無效。此時錯誤碼為
InvalidParameters.Malformed。
開啟
參數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參數需要重啟執行個體生效。
查詢快取適用於特定的情境,建議充分測試後,再考慮開啟,避免引起效能下降或引入其他問題。
驗證效果
控制台左側導覽列選擇自治服務(原CloudDBA) > 效能趨勢,查看MySQL CPU/記憶體:利用率監控圖表,確認 CPU 利用率和記憶體利用率處於正常範圍。
SQL命令
可以通過如下命令來擷取查詢快取的使用狀態。
show global status like ‘Qca%’;Qcache_hits:查詢快取叫用次數。
Qcache_inserts:將查詢和結果集寫入到查詢快取中的次數。
Qcache_not_cached:不可以緩衝的查詢次數。
Qcache_queries_in_cache:查詢快取中緩衝的查詢量。
mysql>show global status like 'Qca%'; +-------------------------+------------+ | Variable_name | Value | +-------------------------+------------+ | Qcache_free_blocks | 2763 | | Qcache_free_memory | 10115160 | | Qcache_hits | 365589713 | | Qcache_inserts | 612280336 | | Qcache_lowmem_prunes | 1257159 | | Qcache_not_cached | 1805250864 | | Qcache_queries_in_cache | 9318 | | Qcache_total_blocks | 22409 | +-------------------------+------------+