您好,登錄后才能下訂單哦!
緩存的有缺點 1、如果命中緩存,直接從緩存中返回,減少分析和執行SQL語句的過程,提高查詢效率 2、緩存會帶來額外的開銷,如果開啟緩存的代價大于不開啟緩存的代價則不建議開啟緩存 緩存的開銷 1、讀查詢在開始之前會先檢查查詢緩存 2、若某個讀查詢可以被緩存且未被緩存,那么當完成執行后,MySQL會將其結果存入查詢緩存 3、對寫操作也有影響,因為當寫入數據時,MySQL必須將對應表的所有緩存都設置失效, 這在緩存內存較大時將導致很大的系統消耗,所以緩存內存并不是越大越好 mysql查詢緩存 1、用于保存查詢語句返回的結果,命中時,MySQL會立即返回結果,省去解析、優化和執行等步驟 2、MySQL保存結果于緩存中,對select語句做hash計算,計算的結果作為key,查詢結果作為value 3、mysql查詢緩存對大小寫敏感,所以使用SQL時盡量使用同一種風格 不會被緩存的語句 1、不確定的數據,不會緩存,如now(),current_time()等 2、若查詢SQL中包含用戶自定義函數,存儲函數,用戶變量,臨時表,mysql庫中系統表 3、SQL中包含字段權限 與緩存相關的服務器變量 mysql> SHOW VARIABLES LIKE 'query%'; #查看和查詢緩存相關的系統變量 query_cache_type: 是否打開緩存 OFF: 關閉 ON: 打開 DEMAND: 只有明確寫了SQL_CACHE的查詢才會寫入緩存 query_cache_size: 緩存使用的總內存空間大小,單位是字節,這個值必須是1024的整數倍 query_cache_min_res_unit: 分配的最小內存塊大小,太大可能導致內存碎片,太小可能導致頻繁請求內存 query_cache_limit: 能夠緩存的最大結果,如果超出這個大小則清處已經緩存的數據 query_cache_wlock_invalidate: 如果某個數據表被鎖住,是否仍然從緩存中返回數據,OFF:表示可以返回 mysql> SHOW STATUS LIKE '%qcache%'; #查看緩存狀態 Qcache_free_blocks #緩存池中空閑塊的個數 Qcache_free_memory #緩存中空閑內存量 Qcache_hits #緩存命中次數 Qcache_inserts #緩存寫入次數 Qcache_lowmen_prunes #因內存不足刪除緩存次數 Qcache_not_cached #查詢未被緩存次數 Qcache_queries_in_cache #當前緩存中緩存的SQL數量 Qcache_total_blocks #緩存的總內存塊 是否使用緩存 1. 通過緩存命中率判斷, 緩存命中率 = 緩存命中次數 (Qcache_hits) / 查詢次數 (Com_select) 2. 通過緩存寫入率, 寫入率 = 緩存寫入次數 (Qcache_inserts) / 查詢次數 (Com_select) 3. 通過 命中-寫入率 判斷, 比率 = 命中次數 (Qcache_hits) / 寫入次數 (Qcache_inserts) 3:1則算是查詢緩存有效,而最好能夠達到10:1 mysql> SHOW GLOBAL STATUS LIKE 'com_select'; #查看查詢次數
分析和配置查詢緩存
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。