1、mysql查詢緩存概述
mysql
1.基本概念算法
查詢緩存的做用就是當查詢接收到一個和以前一樣的查詢,服務器將會從查詢緩存種檢索結果,而不是再次分析和執行上次的查詢。這樣就大大提升了性能,節省時間sql
查詢緩存徹底存儲在內存空間;經過哈希表,鍵值判斷其是否命中數據庫
加速查詢,也會帶來開銷(多了一個步驟、對寫有消耗標記失效、內存的建立回收)緩存
2.查詢緩命中率服務器
經過查詢語句的哈希值判斷:哈希值考慮的因素包括:查詢自己、要查詢的數據庫、客戶端使用協議版本...ide
查詢語句任何字符上的不一樣,都會致使緩存不能命中;函數
3.不能被緩存的查詢性能
查詢中包含用戶自定義函數、存儲函數、用戶自定義變量、臨時表、mysql庫中系統表、或者包含列級權限的表、有着不肯定值的函數(Now());spa
2、查詢緩存相關參數和配置
1.查詢緩存變量
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%query%';
說明:
query_cache_min_res_unit:查詢緩存中內存塊的最小分配單位;
較小值會減小浪費,但會致使更頻繁的內存分配操做;
較大值會帶來浪費,會致使碎片過多;
query_cache_limit:可以緩存的最大查詢結果;
對於有着較大結果的查詢語句,建議在SELECT中使用SQL_NO_CACHE
query_cache_size: 查詢緩存總共可用的內存空間;單位是字節,必須是1024的整數倍;
query_cache_type:ON, OFF, DEMAND(明確指明緩存纔會緩存,不然所有不予緩存)
query_cache_wlock_invalidate:若是某表被其它的鏈接鎖定,是否仍然能夠從查詢緩存中返回結果;默認值爲OFF,表示能夠在表被其它鏈接鎖定的場景中繼續從緩存返回數據;ON則表示不容許;
2.查詢緩存相關的狀態變量
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'Qcache%';
+---------------------------------------+-----------------+
| Variable_name | Value |
+---------------------------------------+-----------------+
| Qcache_free_blocks | 1 | 空閒內存塊數,內存中可能不是連續的塊,多個組成所有大小
| Qcache_free_memory | 16759688 | 空閒的內存空間
| Qcache_hits | 0 | 命中次數
| Qcache_inserts | 0 | 可緩存查詢語句被放入緩存的次數
| Qcache_lowmem_prunes | 0 | 內存太少,而使用LRU算法清理的次數
| Qcache_not_cached | 0 | 可緩存卻沒有被緩存的結果
| Qcache_queries_in_cache | 0 | 在當前緩存空間中被緩存下的語句個數
| Qcache_total_blocks | 1 | 總共有多少內存單元
+----------------------------------------+----------------+
緩存命中率的評估公式:Qcache_hits/(Qcache_hits+Com_select)
Com_select:mysql執行的查詢語句,緩存中命中是不會記錄的