mysql中查詢緩存的示例分析

這篇文章主要介紹MySQL中查詢緩存的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

站在用戶的角度思考問題,與客戶深入溝通,找到東風(fēng)網(wǎng)站設(shè)計與東風(fēng)網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋東風(fēng)地區(qū)。

對mysql查詢緩存從五個角度進行詳細的分析:Query Cache的工作原理、如何配置、如何維護、如何判斷查詢緩存的性能、適合的業(yè)務(wù)場景分析。

工作原理

查詢緩存的工作原理,基本上可以概括為:
緩存SELECT操作或預(yù)處理查詢(注釋:5.1.17開始支持)的結(jié)果集和SQL語句;
新的SELECT語句或預(yù)處理查詢語句,先去查詢緩存,判斷是否存在可用的記錄集,判斷標準:與緩存的SQL語句,是否完全一樣,區(qū)分大小寫;

查詢緩存對什么樣的查詢語句,無法緩存其記錄集,大致有以下幾類:
查詢語句中加了SQL_NO_CACHE參數(shù);
查詢語句中含有獲得值的函數(shù),包涵自定義函數(shù),如:CURDATE()、GET_LOCK()、RAND()、CONVERT_TZ等;
對系統(tǒng)數(shù)據(jù)庫的查詢:mysql、information_schema
查詢語句中使用SESSION級別變量或存儲過程中的局部變量;
查詢語句中使用了LOCK  IN SHARE MODE、FOR UPDATE的語句
查詢語句中類似SELECT …INTO 導(dǎo)出數(shù)據(jù)的語句;
事務(wù)隔離級別為:Serializable情況下,所有查詢語句都不能緩存;
對臨時表的查詢操作;
存在警告信息的查詢語句;
不涉及任何表或視圖的查詢語句;
某用戶只有列級別權(quán)限的查詢語句;

查詢緩存的優(yōu)缺點:

不需要對SQL語句做任何解析和執(zhí)行,當(dāng)然語法解析必須通過在先,直接從Query  Cache中獲得查詢結(jié)果;
查詢緩存的判斷規(guī)則,不夠智能,也即提高了查詢緩存的使用門檻,降低其效率;
Query Cache的起用,會增加檢查和清理Query Cache中記錄集的開銷,而且存在SQL語句緩存的表,每一張表都只有一個對應(yīng)的全局鎖;

配置

是否啟用mysql查詢緩存,可以通過2個參數(shù):query_cache_type和query_cache_size,其中任何一個參數(shù)設(shè)置為0都意味著關(guān)閉查詢緩存功能,但是正確的設(shè)置推薦query_cache_type=0。

query_cache_type
值域為:0 -– 不啟用查詢緩存;
值域為:1 -– 啟用查詢緩存,只要符合查詢緩存的要求,客戶端的查詢語句和記錄集斗可以
緩存起來,共其他客戶端使用;
值域為:2 -– 啟用查詢緩存,只要查詢語句中添加了參數(shù):sql_cache,且符合查詢緩存的要求,客戶端的查詢語句和記錄集,則可以緩存起來,共其他客戶端使用;

query_cache_size
允許設(shè)置query_cache_size的值最小為40K,對于最大值則可以幾乎認為無限制,實際生產(chǎn)環(huán)境的應(yīng)用經(jīng)驗告訴我們,該值并不是越大, 查詢緩存的命中率就越高,也不是對服務(wù)器負載下降貢獻大,反而可能抵消其帶來的好處,甚至增加服務(wù)器的負載,至于該如何設(shè)置,下面的章節(jié)講述,推薦設(shè)置 為:64M;

query_cache_limit
限制查詢緩存區(qū)最大能緩存的查詢記錄集,可以避免一個大的查詢記錄集占去大量的內(nèi)存區(qū)域,而且往往小查詢記錄集是最有效的緩存記錄集,默認設(shè)置為1M,建議修改為16k~1024k之間的值域,不過最重要的是根據(jù)自己應(yīng)用的實際情況進行分析、預(yù)估來設(shè)置;

query_cache_min_res_unit
設(shè)置查詢緩存分配內(nèi)存的最小單位,要適當(dāng)?shù)卦O(shè)置此參數(shù),可以做到為減少內(nèi)存塊的申請和分配次數(shù),但是設(shè)置過大可能導(dǎo)致內(nèi)存碎片數(shù)值上升。默認值為4K,建議設(shè)置為1k~16K

query_cache_wlock_invalidate
該參數(shù)主要涉及MyISAM引擎,若一個客戶端對某表加了寫鎖,其他客戶端發(fā)起的查詢請求,且查詢語句有對應(yīng)的查詢緩存記錄,是否允許直接讀取查詢緩存的記錄集信息,還是等待寫鎖的釋放。默認設(shè)置為0,也即允許;

維護

查詢緩區(qū)的碎片整理

查詢緩存使用一段時間之后,一般都會出現(xiàn)內(nèi)存碎片,為此需要監(jiān)控相關(guān)狀態(tài)值,并且定期進行內(nèi)存碎片的整理,碎片整理的操作語句:FLUSH QUERY CACHE;

清空查詢緩存的數(shù)據(jù)
那些操作操作可能觸發(fā)查詢緩存,把所有緩存的信息清空,以避免觸發(fā)或需要的時候,知道如何做,二類可觸發(fā)查詢緩存數(shù)據(jù)全部清空的命令:
(1).RESET QUERY CACHE;
(2).FLUSH TABLES;

性能監(jiān)控

碎片率
查詢緩存內(nèi)存碎片率=Qcache_free_blocks / Qcache_total_blocks * 100%

命中率
查詢緩存命中率=(Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

內(nèi)存使用率
查詢緩存內(nèi)存使用率=(query_cache_size – Qcache_free_memory) / query_cache_size * 100%

Qcache_lowmem_prunes
該參數(shù)值對于檢測查詢緩存區(qū)的內(nèi)存大小設(shè)置是否,有非常關(guān)鍵性的作用,其代表的意義為:查詢緩存去因內(nèi)存不足而不得不從查詢緩存區(qū)刪除的查詢緩存信息,刪除算法為LRU;
query_cache_min_res_unit

內(nèi)存塊分配的最小單元非常重要,設(shè)置過大可能增加內(nèi)存碎片的概率發(fā)生,太小又可能增加內(nèi)存分配的消耗,為此在系統(tǒng)平穩(wěn)運行一個階段性后,可參考公式的計算值:
查詢緩存最小內(nèi)存塊 = (query_cache_size – Qcache_free_memory) / Qcache_queries_in_cache
query_cache_size

我們?nèi)绾闻袛鄎uery_cache_size是否設(shè)置過小,依然也只有先預(yù)設(shè)置一個值,推薦為:32M~128M之間的區(qū)域,待系統(tǒng)平穩(wěn)運行一個時間段(至少1周),并且觀察這周內(nèi)的相關(guān)狀態(tài)值:
(1).Qcache_lowmem_prunes;
(2).命中率;
(3).內(nèi)存使用率;

若整個平穩(wěn)運行期監(jiān)控獲得的信息,為命中率高于80%,內(nèi)存使用率超過80%,并且Qcache_lowmem_prunes的值不停地增加,而且增加的數(shù)值還較大,則說明我們?yōu)椴樵兙彌_區(qū)分配的內(nèi)存過小,可以適當(dāng)?shù)卦黾硬樵兙彺鎱^(qū)的內(nèi)存大小;

若是整個平穩(wěn)運行期監(jiān)控獲得的信息,為命中率低于40%,Qcache_lowmem_prunes的值也保持一個平穩(wěn)狀態(tài),則說明我們的查詢緩沖區(qū)的內(nèi) 存設(shè)置過大,或者說業(yè)務(wù)場景重復(fù)執(zhí)行一樣查詢語句的概率低,同時若還監(jiān)測到一定量的freeing items,那么必須考慮把查詢緩存的內(nèi)存條小,甚至關(guān)閉查詢緩存功能;

業(yè)務(wù)場景

通過上述的知識梳理和分析,我們至少知道查詢緩存的以下幾點:
查詢緩存能夠加速已經(jīng)存在緩存的查詢語句的速度,可以不用重新解析和執(zhí)行而獲得正確得記錄集;
查詢緩存中涉及的表,每一個表對象都有一個屬于自己的全局性質(zhì)的鎖;
表若是做DDL、FLUSH TABLES 等類似操作,觸發(fā)相關(guān)表的查詢緩存信息清空;
表對象的DML操作,必須優(yōu)先判斷是否需要清理相關(guān)查詢緩存的記錄信息,將不可避免地出現(xiàn)鎖等待事件;
查詢緩存的內(nèi)存分配問題,不可避免地產(chǎn)生一些內(nèi)存碎片;
查詢緩存對是否是一樣的查詢語句,要求非??量蹋疫€不智能;

我們再重新回到本節(jié)的重點上,查詢緩存適合什么樣的業(yè)務(wù)場景呢?只要是清楚了查詢緩存的上述優(yōu)缺點,就不難羅列出來,業(yè)務(wù)場景要求:
整個系統(tǒng)以讀為主的業(yè)務(wù),比如門戶型、新聞類、報表型、論壇等網(wǎng)站;
查詢語句操作的表對象,非頻繁地進行DML操作,可以使用query_cache_type=2模式,然后SQL語句加SQL_CACHE參數(shù)指定;

以上是“mysql中查詢緩存的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享題目:mysql中查詢緩存的示例分析
網(wǎng)頁URL:http://muchs.cn/article16/jpjpgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、品牌網(wǎng)站設(shè)計關(guān)鍵詞優(yōu)化、、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)