MySQL query_cache_type 參數(shù)與使用詳解
MySQL設置查詢緩存的用意:
把查詢到的結(jié)果緩存起來,下次再執(zhí)行相同查詢時就可以直接從結(jié)果集中??;這樣就比重新查一遍要快的多。
查詢緩存的最終結(jié)果是事與愿違:
之所以查詢緩存并沒有能起到提升性能的做用,客觀上有如下兩點原因
1、把SQL語句的hash值作為鍵,SQL語句的結(jié)果集作為值;這樣就引起了一個問題如 select user from mysql.user 和 SELECT user FROM mysql.user
這兩個將會被當成不同的SQL語句,這個時候就算結(jié)果集已經(jīng)有了,但是一然用不到。
2、當查詢所基于的低層表有改動時與這個表有關的查詢緩存都會作廢、如果對于并發(fā)度比較大的系統(tǒng)這個開銷是可觀的;對于作廢結(jié)果集這個操作也是要用并發(fā)
訪問控制的,就是說也會有鎖。并發(fā)大的時候就會有Waiting for query cache lock 產(chǎn)生。
3、至于用不用還是要看業(yè)務模型的。
如果何配置查詢緩存:
query_cache_type 這個系統(tǒng)變量控制著查詢緩存工能的開啟的關閉。
query_cache_type=0時表示關閉,1時表示打開,2表示只要select 中明確指定SQL_CACHE才緩存。
這個參數(shù)的設置有點奇怪,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。
查詢緩存相關的系統(tǒng)變量:
have_query_cache 表示這個mysql版本是否支持查詢緩存。
query_cache_limit 表示單個結(jié)果集所被允許緩存的最大值。
query_cache_min_res_unit 每個被緩存的結(jié)果集要占用的最小內(nèi)存。
query_cache_size 用于查詢緩存的內(nèi)存大小。
如何監(jiān)控查詢緩存的命中率:
Qcache_free_memory 查詢緩存目前剩余空間大小。
Qcache_hits 查詢緩存的命中次數(shù)。
Qcache_inserts 查詢緩存插入的次數(shù)。
也就是說緩存的命中率為 Qcache_hits/(Qcache_hits+Qcache_inserts)
一般單獨設置這個可不行,得結(jié)合,建議看一下下面的文章
相關文章
解決hibernate+mysql寫入數(shù)據(jù)庫亂碼
初次沒習hibernate,其中遇到問題在網(wǎng)上找的答案與大家共同分享!2009-07-07MySQL登錄時出現(xiàn) Access denied for user ‘
今天打開mysql的時候突然提示:Access denied for user 'root'@'localhost' (using password: YES) 在網(wǎng)上搜索了很多文章,本文就來做一下總結(jié),介紹了幾種場景的解決方法,感興趣的可以了解一下2024-03-03mysql 5.7.17 安裝教程 附MySQL服務無法啟動的解決方法
這篇文章主要為大家詳細介紹了mysql 5.7.17安裝教程,并且為大家分享了MySQL服務無法啟動的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03mssql2008 自定義表類型實現(xiàn)(批量插入或者修改)
在做大型網(wǎng)站或者系統(tǒng)的時候,經(jīng)常會遇到個問題就是批量插入或者修改數(shù)據(jù)庫;今天這邊不講SqlBulkCopy,只簡單講sql自定義表類型,感興趣的朋友可以了解下哦,希望本文對你有所幫助2013-01-01MySQL數(shù)據(jù)庫自增主鍵的間隔不為1的解決方式
這篇文章主要介紹了MySQL數(shù)據(jù)庫自增主鍵的間隔不為1的解決方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12