MySQL query_cache_type 參數(shù)與使用詳解
MySQL設(shè)置查詢緩存的用意:
把查詢到的結(jié)果緩存起來(lái),下次再執(zhí)行相同查詢時(shí)就可以直接從結(jié)果集中??;這樣就比重新查一遍要快的多。
查詢緩存的最終結(jié)果是事與愿違:
之所以查詢緩存并沒有能起到提升性能的做用,客觀上有如下兩點(diǎn)原因
1、把SQL語(yǔ)句的hash值作為鍵,SQL語(yǔ)句的結(jié)果集作為值;這樣就引起了一個(gè)問題如 select user from mysql.user 和 SELECT user FROM mysql.user
這兩個(gè)將會(huì)被當(dāng)成不同的SQL語(yǔ)句,這個(gè)時(shí)候就算結(jié)果集已經(jīng)有了,但是一然用不到。
2、當(dāng)查詢所基于的低層表有改動(dòng)時(shí)與這個(gè)表有關(guān)的查詢緩存都會(huì)作廢、如果對(duì)于并發(fā)度比較大的系統(tǒng)這個(gè)開銷是可觀的;對(duì)于作廢結(jié)果集這個(gè)操作也是要用并發(fā)
訪問控制的,就是說也會(huì)有鎖。并發(fā)大的時(shí)候就會(huì)有Waiting for query cache lock 產(chǎn)生。
3、至于用不用還是要看業(yè)務(wù)模型的。
如果何配置查詢緩存:
query_cache_type 這個(gè)系統(tǒng)變量控制著查詢緩存工能的開啟的關(guān)閉。
query_cache_type=0時(shí)表示關(guān)閉,1時(shí)表示打開,2表示只要select 中明確指定SQL_CACHE才緩存。
這個(gè)參數(shù)的設(shè)置有點(diǎn)奇怪,1、如果事先查詢緩存是關(guān)閉的然而用 set @@global.query_cache_type=1; 會(huì)報(bào)錯(cuò)
ERROR 1651 (HY000): Query cache is disabled; restart the server with query_cache_type=1 to enable it
2、如果事先是打開著的嘗試去閉關(guān)它,那么這個(gè)關(guān)閉也是不完全的,這種情況下查詢還是會(huì)去嘗試查找緩存。
最好的關(guān)閉查詢緩存的辦法就是把my.cnf 中的query_cache_type=0然后再重啟mysql。
查詢緩存相關(guān)的系統(tǒng)變量:
have_query_cache 表示這個(gè)mysql版本是否支持查詢緩存。
query_cache_limit 表示單個(gè)結(jié)果集所被允許緩存的最大值。
query_cache_min_res_unit 每個(gè)被緩存的結(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)
一般單獨(dú)設(shè)置這個(gè)可不行,得結(jié)合,建議看一下下面的文章
相關(guān)文章
mysql分組后如何獲取每個(gè)組的第一條數(shù)據(jù)
這篇文章主要介紹了mysql分組后如何獲取每個(gè)組的第一條數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
mysql 開發(fā)技巧之JOIN 更新和數(shù)據(jù)查重/去重
這篇文章主要介紹了mysql 開發(fā)技巧之JOIN 更新和數(shù)據(jù)查重/去重的相關(guān)資料,需要的朋友可以參考下2016-09-09
MySQL的鎖機(jī)制之全局鎖和表鎖的實(shí)現(xiàn)
本文主要介紹了MySQL的鎖機(jī)制之全局鎖和表鎖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
MySQL入門(一) 數(shù)據(jù)表數(shù)據(jù)庫(kù)的基本操作
這類文章記錄我看MySQL5.6從零開始學(xué)》這本書的過程,將自己覺得重要的東西記錄一下,并有可能幫助到你們,在寫的博文前幾篇度會(huì)非常基礎(chǔ),只要?jiǎng)邮智?,跟著我寫的例子全部?shí)現(xiàn)一遍,基本上就搞定了,前期很難理解的東西基本沒有2018-07-07
MySql數(shù)據(jù)引擎簡(jiǎn)介與選擇方法
在MySQL 5.1中,MySQL AB引入了新的插件式存儲(chǔ)引擎體系結(jié)構(gòu),允許將存儲(chǔ)引擎加載到正在運(yùn)新的MySQL服務(wù)器中2012-11-11
刪除MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單教程
這篇文章主要介紹了刪除MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單教程,是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05

