MySQL query_cache_type 詳解


MySQL設置查詢緩存的用意:

  把查詢到的結果緩存起來,下次再執行相同查詢時就可以直接從結果集中取;這樣就比重新查一遍要快的多。

 

查詢緩存的最終結果是事與願違:

  之所以查詢緩存並沒有能起到提升性能的做用,客觀上有如下兩點原因

  1、把SQL語句的hash值作為鍵,SQL語句的結果集作為值;這樣就引起了一個問題如 select user from mysql.user 和 SELECT user FROM mysql.user 

  這兩個將會被當成不同的SQL語句,這個時候就算結果集已經有了,但是一然用不到。

 

  2、當查詢所基於的低層表有改動時與這個表有關的查詢緩存都會作廢、如果對於並發度比較大的系統這個開銷是可觀的;對於作廢結果集這個操作也是要用並發

  訪問控制的,就是說也會有鎖。並發大的時候就會有Waiting for query cache lock 產生。

 

  3、至於用不用還是要看業務模型的。

 

如果何配置查詢緩存:

  query_cache_type 這個系統變量控制着查詢緩存工能的開啟的關閉。

  query_cache_type=0時表示關閉,1時表示打開,2表示只要select 中明確指定SQL_CACHE才緩存。

  這個參數的設置有點奇怪,1、如果事先查詢緩存是關閉的然而用 set @@global.query_cache_type=1; 會報錯

  ERROR 1651 (HY000): Query cache is disabled; restart the server with query_cache_type=1 to enable it

  2、如果事先是打開着的嘗試去閉關它,那么這個關閉也是不完全的,這種情況下查詢還是會去嘗試查找緩存。

  最好的關閉查詢緩存的辦法就是把my.cnf 中的query_cache_type=0然后再重啟mysql。

 

查詢緩存相關的系統變量:

  have_query_cache  表示這個mysql版本是否支持查詢緩存。

  query_cache_limit   表示單個結果集所被允許緩存的最大值。

  query_cache_min_res_unit  每個被緩存的結果集要占用的最小內存。

  query_cache_size  用於查詢緩存的內存大小。

 

如何監控查詢緩存的命中率: 

  Qcache_free_memory  查詢緩存目前剩余空間大小。

  Qcache_hits          查詢緩存的命中次數。

  Qcache_inserts      查詢緩存插入的次數。

  也就是說緩存的命中率為 Qcache_hits/(Qcache_hits+Qcache_inserts)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM