天天看點

RDS for MySQL查詢緩存 (Query Cache) 的設定和使用

<a href="#1">功能和适用範圍</a>

<a href="#2">原理</a>

<a href="#3">限制</a>

<a href="#4">設定</a>

<a href="#5f">驗證效果</a>

功能:

降低 cpu 使用率

降低 iops 使用率(某些情況下)

減少查詢響應時間,提高系統的吞吐量

适用範圍:

表資料修改不頻繁、資料較靜态

查詢(select)重複度高

查詢結果集小于 1 mb

注:

查詢緩存并不一定帶來性能上的提升,在某些情況下(比如查詢數量大,但重複的查詢很少)開啟查詢緩存會帶來性能的下降。

rds for mysql 對來自用戶端的查詢(select)進行 hash 計算得到該查詢的hash值,通過該hash 值到查詢緩存中比對該查詢的結果。

如果比對(命中),則将查詢的結果集直接傳回給用戶端,不必再解析、執行查詢。

如果沒有比對(命中),則将 hash 值和結果集儲存在查詢緩存中,以便以後使用。

查詢涉及的任何一個表中資料發生變化,rds for 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 的查詢。

rds 控制台 

RDS for MySQL查詢緩存 (Query Cache) 的設定和使用

 參數設定

query_cache_limit: 查詢緩存中可存放的單條查詢最大結果集、預設為 1 mb;超過該大小的結果集不被緩存。

query_cache_size: 查詢緩存的大小。

query_cache_type: 是否開啟查詢緩存功能。

        取值為 0 :關閉查詢功能

        取值為 1 :開啟查詢緩存功能,但不緩存 select sql_no_cache 開頭的查詢。

        取值為 2 :開啟查詢緩存功能,但僅緩存 select sql_cache 開頭的查詢。

RDS for MySQL查詢緩存 (Query Cache) 的設定和使用

修改 query_cache_type 需要重新開機執行個體(修改後執行個體會自動重新開機)。

參數 query_cache_size 要求設定值為 1024 的整數倍,否則會提示 “參數格式錯誤,請重新輸入”。

RDS for MySQL查詢緩存 (Query Cache) 的設定和使用

參數 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 參數需要重新開機執行個體生效。

查詢緩存适用于特定的場景,建議充分測試後,再考慮開啟,避免引起性能下降或引入其他問題。

RDS for MySQL查詢緩存 (Query Cache) 的設定和使用
RDS for MySQL查詢緩存 (Query Cache) 的設定和使用

可以通過 show global status like ‘qca%’ 來擷取查詢緩存的使用狀态。

qcache_hits :查詢緩存命中次數。

qcache_inserts:将查詢和結果集寫入到查詢緩存中的次數。

qcache_not_cached:不可以緩存的查詢次數。

qcache_queries_in_cache:查詢緩存中緩存的查詢量。