免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
線上環(huán)境到底要不要開啟query cache

Query Cache(查詢緩存,以下簡(jiǎn)稱QC)存儲(chǔ)SELECT語(yǔ)句及其產(chǎn)生的數(shù)據(jù)結(jié)果,特別適用于:頻繁提交同一個(gè)語(yǔ)句,并且該表數(shù)據(jù)變化不是很頻繁的場(chǎng)景,例如一些靜態(tài)頁(yè)面,或者頁(yè)面中的某塊不經(jīng)常發(fā)生變化的信息。QC有可能會(huì)從InnoDB Buffer Pool或者MyISAM key buffer里讀取結(jié)果。

由于QC需要緩存最新數(shù)據(jù)結(jié)果,因此表數(shù)據(jù)發(fā)生任何變化(INSERT、UPDATE、DELETE或其他可能產(chǎn)生數(shù)據(jù)變化的操作),都會(huì)導(dǎo)致QC被刷新。

根據(jù)MySQL官方的測(cè)試,QC的優(yōu)劣分別是:

1、如果對(duì)一個(gè)表執(zhí)行簡(jiǎn)單的查詢,但每次查詢都不一樣的話,打開QC后,性能反而下降了13%左右。但通常實(shí)際業(yè)務(wù)中,通常不會(huì)只有這種請(qǐng)求,因此實(shí)際影響應(yīng)該比這個(gè)小一些。2、如果對(duì)一個(gè)只有一行數(shù)據(jù)的表進(jìn)行查詢,則可以提升238%,這個(gè)效果還是非常不錯(cuò)的。

因此,如果是在一個(gè)更新頻率非常低而只讀查詢頻率非常高的場(chǎng)景下,打開QC還是比較有優(yōu)勢(shì)的,其他場(chǎng)景下,則不建議使用。而且,QC一般也維持在100MB以內(nèi)就夠了,沒必要設(shè)置超過數(shù)百M(fèi)B。

QC嚴(yán)格要求2次SQL請(qǐng)求要完全一樣,包括SQL語(yǔ)句,連接的數(shù)據(jù)庫(kù)、協(xié)議版本、字符集等因素都會(huì)影響,下面幾個(gè)例子中的SQL會(huì)被認(rèn)為是完全不一樣而不會(huì)使用同一個(gè)QC內(nèi)存塊:

mysql> set names latin1; SELECT * FROM table_name;mysql> set names latin1; select * from table_name;mysql> set names utf8; select * from table_name;

此外,QC也不適用于下面幾個(gè)場(chǎng)景:

1、子查詢或者外層查詢;2、存儲(chǔ)過程、存儲(chǔ)函數(shù)、觸發(fā)器、event中調(diào)用的SQL,或者引用到這些結(jié)果的;3、包含一些特殊函數(shù)時(shí),例如:BENCHMARK()、CURDATE()、CURRENT_TIMESTAMP()、NOW()、RAND()、UUID()等等;4、讀取mysql、INFORMATION_SCHEMA、performance_schema 庫(kù)數(shù)據(jù)的;5、類似SELECT…LOCK IN SHARE MODE、SELECT…FOR UPDATE、SELECT..INTO OUTFILE/DUMPFILE、SELECT..WHRE…IS NULL等語(yǔ)句;6、SELECT執(zhí)行計(jì)劃用到臨時(shí)表(TEMPORARY TABLE);7、未引用任何表的查詢,例如 SELECT 1+1 這種;8、產(chǎn)生了 warnings 的查詢;9、SELECT語(yǔ)句里加了 SQL_NO_CACHE 關(guān)鍵字;

更加奇葩的是,MySQL在從QC中取回結(jié)果前,會(huì)先判斷執(zhí)行SQL的用戶是否有全部庫(kù)、表的SELECT權(quán)限,如果沒有,則也不會(huì)使用QC。

相比下面這個(gè),其實(shí)上面所說(shuō)的都不重要。

最為重要的是,在MySQL里QC是由一個(gè)全局鎖在控制,每次更新QC的內(nèi)存塊都需要進(jìn)行鎖定。
例如,一次查詢結(jié)果是20KB,當(dāng)前 query_cache_min_res_unit 值設(shè)置為 4KB(默認(rèn)值就是4KB,可調(diào)整),那么么本次查詢結(jié)果共需要分為5次寫入QC,每次都要鎖定,可見其成本有多高。

我們可以通過 PROFILING 功能來(lái)查看 QC 相關(guān)的一些鎖競(jìng)爭(zhēng),例如像下面這樣的:

· Waiting for query cache lock· Waiting on query cache mutex

或者,也可以通過執(zhí)行 SHOW PROCESSLIST 來(lái)看線程的狀態(tài),例如:

· checking privileges on cached query檢查用戶是否有權(quán)限讀取QC中的結(jié)果集· checking query cache for query檢查本次查詢結(jié)果是否已經(jīng)存儲(chǔ)在QC中· invalidating query cache entries由于相關(guān)表數(shù)據(jù)已經(jīng)修改了,因此將QC中的內(nèi)存記錄被標(biāo)記為失效· sending cached result to client從QC中,將緩存后的結(jié)果返回給客戶程序· storing result in query cache將查詢結(jié)果緩存到QC中

如果可以頻繁看到上述幾種狀態(tài),那么說(shuō)明當(dāng)前QC基本存在比較重的競(jìng)爭(zhēng)。

說(shuō)了這么多廢話,其實(shí)核心要點(diǎn)就一個(gè):
如果線上環(huán)境中99%以上都是只讀,很少有更新,再考慮開啟QC吧,否則,就別開了。
關(guān)閉方法很簡(jiǎn)單,有兩種:

1、同時(shí)設(shè)置選項(xiàng) query_cache_type = 0 和 query_cache_size = 0;2、如果用源碼編譯MySQL的話,編譯時(shí)增加參數(shù) --without-query-cache 即可;

延伸閱讀:
http://www.dbasquare.com/kb/how-query-cache-can-cause-performance-problems/
http://www.percona.com/blog/2012/09/05/write-contentions-on-the-query-cache/
http://dev.mysql.com/doc/refman/5.6/en/query-cache.html

1
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
mysql查詢緩存
如何減少對(duì)Mysql的訪問以優(yōu)化SQL語(yǔ)句
MySQL查詢高速緩沖設(shè)置
Mysql 數(shù)據(jù)庫(kù)緩存cache功能總結(jié)
Mysql 不使用查詢緩存
mysql系統(tǒng)變量
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服