本文主要給大家介紹查詢mysql的緩存優(yōu)化詳解,希望可以給大家補(bǔ)充和更新些知識(shí),如有其它問(wèn)題需要了解的可以持續(xù)在創(chuàng)新互聯(lián)行業(yè)資訊里面關(guān)注我的更新文章的。
創(chuàng)新互聯(lián)建站,為您提供成都網(wǎng)站建設(shè)公司、成都網(wǎng)站制作、網(wǎng)站營(yíng)銷推廣、網(wǎng)站開(kāi)發(fā)設(shè)計(jì),對(duì)服務(wù)濕噴機(jī)等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!寫在前面:查詢緩存從MySQL 5.7.20開(kāi)始已被棄用,并在MySQL 8.0中被刪除。
Query cache 作用于整個(gè) MySQL,主要用來(lái)緩存 MySQL 中的查詢結(jié)果集,也就是一條SQL語(yǔ)句執(zhí)行的結(jié)果集,所以僅僅只能針對(duì)select語(yǔ)句。當(dāng)我們打開(kāi)了 Query Cache 功能,MySQL在接受到一條select語(yǔ)句的請(qǐng)求后,如果命中緩存,也就是說(shuō)所需結(jié)果集已經(jīng)在緩存中了,后面一系列步驟都不用再執(zhí)行,直接從緩存拿到結(jié)果集返回給客戶端,可以極大的提高查詢性能!
sql 查詢數(shù)據(jù)庫(kù) 執(zhí)行步驟如下:
從上圖可以看出,當(dāng)select 命中緩存后,后面一系列的sql解析,預(yù)處理,優(yōu)化器處理都不用進(jìn)行!
數(shù)據(jù)庫(kù)緩存打開(kāi)方式:
query_cache_size參數(shù)可以根據(jù)自己數(shù)據(jù)庫(kù)查詢運(yùn)行狀況進(jìn)行自行調(diào)整,調(diào)整原則稍后介紹!
query_cache_type可以設(shè)置為0,1或者2(DEMOND),分別表示完全不使用query cache,除顯式要求不使用query cache(使用sql_no_cache)之外的所有的select都使用query cache,只有顯示要求才使用query cache(使用sql_cache)
可以用如下命令show variables like '%have_query_cache%';查看是否開(kāi)啟,其中have_query_cache為是否開(kāi)啟,query_cache_limit 指定單個(gè)查詢能夠使用的緩沖區(qū)大小,缺省為1M;query_cache_min_res_unit為系統(tǒng)分配的最小緩存塊大小,默認(rèn)是4KB,設(shè)置值大對(duì)大數(shù)據(jù)查詢有好處,但如果你的查詢都是小數(shù)據(jù) 查詢,就容易造成內(nèi)存碎片和浪費(fèi);
通過(guò)以下命令查看緩存相關(guān)變量 show variables like '%query_cache%';
通過(guò)以下命令查看查詢緩存狀態(tài) show status like '%Qcache%';
Qcache_free_blocks:目前還處于空閑狀態(tài)的 Query Cache 中內(nèi)存 Block 數(shù)目
Qcache_free_memory:目前還處于空閑狀態(tài)的 Query Cache 內(nèi)存總量
Qcache_hits:Query Cache 命中次數(shù)
Qcache_inserts:向 Query Cache 中插入新的 Query Cache的次數(shù),也就是沒(méi)有命中的次數(shù)
Qcache_lowmem_prunes:當(dāng) Query Cache 內(nèi)存容量不夠,需要從中刪除老的 Query Cache以給新的 Cache 對(duì)象使用的次數(shù)
Qcache_not_cached:沒(méi)有被 Cache 的 SQL 數(shù),包括無(wú)法被 Cache 的 SQL 以及由于query_cache_type 設(shè)置的不會(huì)被 Cache 的 SQL
Qcache_queries_in_cache:目前在 Query Cache 中的 SQL 數(shù)量
Qcache_total_blocks:Query Cache 中總的 Block 數(shù)量
檢查換成命中情況
查詢緩存命中率的計(jì)算公式是 Qcache_hits/(Qcache_hits+Com_select)。
query_cache_min_res_unit默認(rèn)是4KB,設(shè)置值大對(duì)大數(shù)據(jù)查詢有好處,但如果你的查詢都是小數(shù)據(jù)查詢,就容易造成內(nèi)存碎片和浪費(fèi)。
查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
如果查詢緩存碎片率超過(guò)20%,可以用FLUSH QUERYCACHE整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小數(shù)據(jù)量的話。
查詢緩存利用率 = (query_cache_size - Qcache_free_memory) /query_cache_size * 100%
查詢緩存利用率在25%以下的話說(shuō)明query_cache_size設(shè)置的過(guò)大,可適當(dāng)減小;查詢緩存利用率在80%以上而且Qcache_lowmem_prunes >50的話說(shuō)明query_cache_size可能有點(diǎn)小,要不就是碎片太多。
查詢緩存命中率 = (Qcache_hits - Qcache_inserts) / Qcache_hits * 100%
優(yōu)化提示:
如果Qcache_lowmem_prunes 值比較大,表示查詢緩存區(qū)大小設(shè)置太小,需要增大。
如果Qcache_free_blocks 較多,表示內(nèi)存碎片較多,需要清理,flush query cache
高性能mysql中關(guān)于query_cache_min_res_unit大小調(diào)優(yōu)給出的計(jì)算公式 query_cache_min_res_unit = (query_cache_size - Qcache_free_memory)/ Qcache_queries_in_cache
mysql在判斷是否命中緩存時(shí),任何字符的不同 ,不確定的函數(shù) 都將導(dǎo)致緩存無(wú)法命中,子查詢,存儲(chǔ)過(guò)程也將導(dǎo)致查詢緩存無(wú)法命中;
mysql查詢緩存在帶來(lái)查詢性能提升的同時(shí),也會(huì)帶來(lái)其他的一些問(wèn)題:首先、打開(kāi)查詢緩存,對(duì)讀對(duì)寫都會(huì)帶來(lái)額外的消耗
1)首先在讀查詢之前,必須先去檢查是否命中緩存
2)如果命中緩存,那么直接返回結(jié)果集給用戶,不在執(zhí)行后續(xù)一系列操作,如果沒(méi)有命中緩存,那么在查詢完成后,還需要將結(jié)果集存入查詢緩存,這本身也是一個(gè)消耗
3)對(duì)寫操作也有很大影響,因?yàn)槲覀冊(cè)趯?duì)表進(jìn)行時(shí),也需要先將該表的查詢緩存設(shè)置為失效,如果這個(gè)表的緩存很大,那么這也是一個(gè)相當(dāng)大的消耗。
對(duì)查詢緩存的寫和設(shè)置失效操作都是一個(gè)排他鎖操作
1)對(duì)于innodb 來(lái)說(shuō),事務(wù)特性會(huì)限制查詢的使用,事務(wù)中修改了某個(gè)表,那么,需要將這個(gè)表的查詢緩存設(shè)置為失效,RR,RC 模式下,事物特性會(huì)隔離這個(gè)修改對(duì)其他事務(wù)不可見(jiàn)!在這個(gè)事務(wù)提交前,這個(gè)表的其他相關(guān)查詢都是無(wú)法緩存的,只有在這個(gè)表修改事物提交后,這個(gè)表的相關(guān)查詢才可以緩存,因此,長(zhǎng)時(shí)間的大的更新事務(wù)將導(dǎo)致查詢緩存效率大大下降!
2)如果我們開(kāi)啟了一個(gè)很大的查詢緩存,在緩存失效操作時(shí),可能導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)系統(tǒng)都出現(xiàn)性能問(wèn)題,因?yàn)榫彺媸Р僮魇且粋€(gè)全局鎖,其他
所有需要做緩存失效操作的查詢都要等待這個(gè)鎖,而且無(wú)論緩存命中檢測(cè),還是緩存失效檢測(cè)都需要等待這個(gè)鎖。緩存過(guò)大時(shí),這將導(dǎo)致嚴(yán)重的性能瓶頸。
因此我們?cè)陂_(kāi)啟查詢緩存時(shí),一定是根據(jù)業(yè)務(wù)需要,開(kāi)啟一個(gè)大小比較合理的查詢緩存,在線上避免大的事務(wù)!
看了以上關(guān)于查詢mysql的緩存優(yōu)化詳解,希望能給大家在實(shí)際運(yùn)用中帶來(lái)一定的幫助。本文由于篇幅有限,難免會(huì)有不足和需要補(bǔ)充的地方,如有需要更加專業(yè)的解答,可在官網(wǎng)聯(lián)系我們的24小時(shí)售前售后,隨時(shí)幫您解答問(wèn)題的。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享文章:查詢mysql的緩存優(yōu)化詳解-創(chuàng)新互聯(lián)
URL標(biāo)題:http://m.rwnh.cn/article32/dggesc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷、網(wǎng)站制作、云服務(wù)器、網(wǎng)站內(nèi)鏈、定制開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容