mysql資料快取查詢 Mysql查詢快取

2021-10-17 19:22:11 字數 2058 閱讀 9525

查詢快取

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...