查詢快取
mysql提供了一種快取型別,會快取整個select查詢結果。mysql查詢快取儲存查詢返回的完整結果。
當查詢命中該快取,mysql會立即返回結果,跳過了解析、優化和執行階段。
以下兩種情況不能被快取:
頻繁更新、修改的的表,所有快取資料都會失效,mysql查詢快取會跟蹤查詢中涉及的表,如果這個表資料發生變化,所有快取資料都會失效。
查詢語句中包含任何不確定的函式,此查詢語句的結果是不會被快取的。
mysql如何快取,以及判斷快取命中
mysql如何快取
mysql會將快取結果放到一張引用表中,通過乙個雜湊值引用,這個雜湊值包括:查詢語句本身,當前要查詢的資料庫、客戶端協議的版本等。
mysql判斷快取命中
當有查詢語句時,mysql首先檢查查詢快取,如果找到快取就返回快取,沒有找到,才會解析sql。
1.伺服器接收sql,以sql和一些其他條件為key查詢快取表。
2.如果找到了快取,則直接返回快取 。
3.如果沒有找到快取,則執行sql查詢,包括原來的sql解析,優化等。
4.執行完sql查詢結果以後,將sql查詢結果快取入快取表。
開啟查詢快取
檢視是否開啟快取及快取配置相關引數
show variables like 'query';
快取引數配置
如何設定引數:在my.cnf配置檔案中設定
query_cache_type: 是否開啟快取1) off: 關閉2) on: 總是開啟3) demand: 只有明確寫了sql_cache的查詢才會吸入快取
query_cache_size: 快取使用的總記憶體空間大小,單位是位元組,這個值必須是1024的整數倍,否則mysql實際分配可能跟這個數值不同(感覺這個應該跟檔案系統的blcok大小有關)
query_cache_min_res_unit: 分配記憶體塊時的最小單位大小
query_cache_limit: mysql能夠快取的最大結果,如果超出,則增加 qcache_not_cached的值,並刪除查詢結果
query_cache_wlock_invalidate: 如果某個資料表被鎖住,是否仍然從快取中返回資料,預設是off,表示仍然可以返回
global staus 中 關於 快取的引數解釋:
qcache_free_blocks: 快取池中空閒塊的個數
qcache_free_memory: 快取中空閒記憶體量
qcache_hits: 快取命中次數
qcache_inserts: 快取寫入次數
qcache_lowmen_prunes: 因記憶體不足刪除快取次數
qcache_not_cached: 查詢未被快取次數,例如查詢結果超出快取塊大小,查詢中包含可變函式等
qcache_queries_in_cache: 當前快取中快取的sql數量
qcache_total_blocks: 快取總block數
分析與配置快取流程:
快取是否應該被使用
衡量開啟快取是否對系統有效能提公升是乙個很難的話題
通過快取命中率判斷, 快取命中率 = 快取命中次數 (qcache_hits) / 查詢次數 (com_select)
通過快取寫入率, 寫入率 = 快取寫入次數 (qcache_inserts) / 查詢次數 (qcache_inserts)
通過 命中-寫入率 判斷, 比率 = 命中次數 (qcache_hits) / 寫入次數 (qcache_inserts), 高效能mysql中稱之為比較能反映效能提公升的指數,一般來說達到3:1則算是查詢快取有效,而最好能夠達到10:1
快取未命中可能原因:
查詢語句無法被快取,查詢中有不確定的函式,或者查詢結果太大而無法被快取。
查詢快取的記憶體用完了,mysql需要快取"逐出",或者由於資料表被修改導致快取失效。
快取命中率低可能原因:
查詢快取沒有完成預熱,mysql還沒有集合將查詢結果都快取起來。
查詢語句之前從未執行過。
快取失效操作太多了。
php快取查詢請求
快取sql查詢結果 為什麼要快取查詢結果?快取查詢結果能極大地改進指令碼執行時間和資源需求。快取sql查詢結果也允許你通過後期處理資料。如果你用檔案快取去儲存全部指令碼的輸出結果 html輸出 這樣可能是行不通的。當你執行乙個sql查詢時,點典的處理過程是 l 連線資料庫 l 準備sql查詢 l 傳...
MyBatis從快取查詢資料的依據
mybatis的查詢依據是 sql的id sql語句。hibernate的查依據是 查詢結果物件的id。快取的底層實現是乙個map,map的value是查詢結果。map的key,即查詢依據,使用的orm架構不同,查詢依據就不不同。快取的底層實現是乙個map,map的value是查詢結果 map的ke...
npm快取查詢和bug解決
npm config edit.npmrc配置檔案位址 npm config listnpm config get cachenpm config get prefix或者 npm root gnpm config set prefix npm config set cache 1.關於npm ca...