對(duì)mysql查詢(xún)緩存從五個(gè)角度進(jìn)行詳細(xì)的分析:Query Cache的工作原理、如何配置、如何維護(hù)、如何判斷查詢(xún)緩存的性能、適合的業(yè)務(wù)場(chǎng)景分析。
工作原理
查詢(xún)緩存的工作原理,基本上可以概括為:
緩存SELECT操作或預(yù)處理查詢(xún)(注釋?zhuān)?.1.17開(kāi)始支持)的結(jié)果集和SQL語(yǔ)句;
新的SELECT語(yǔ)句或預(yù)處理查詢(xún)語(yǔ)句,先去查詢(xún)緩存,判斷是否存在可用的記錄集,判斷標(biāo)準(zhǔn):與緩存的SQL語(yǔ)句,是否完全一樣,區(qū)分大小寫(xiě);
查詢(xún)緩存對(duì)什么樣的查詢(xún)語(yǔ)句,無(wú)法緩存其記錄集,大致有以下幾類(lèi):
查詢(xún)語(yǔ)句中加了SQL_NO_CACHE參數(shù);
查詢(xún)語(yǔ)句中含有獲得值的函數(shù),包涵自定義函數(shù),如:CURDATE()、GET_LOCK()、RAND()、CONVERT_TZ等;
對(duì)系統(tǒng)數(shù)據(jù)庫(kù)的查詢(xún):mysql、information_schema
查詢(xún)語(yǔ)句中使用SESSION級(jí)別變量或存儲(chǔ)過(guò)程中的局部變量;
查詢(xún)語(yǔ)句中使用了LOCK IN SHARE MODE、FOR UPDATE的語(yǔ)句
查詢(xún)語(yǔ)句中類(lèi)似SELECT …INTO 導(dǎo)出數(shù)據(jù)的語(yǔ)句;
事務(wù)隔離級(jí)別為:Serializable情況下,所有查詢(xún)語(yǔ)句都不能緩存;
對(duì)臨時(shí)表的查詢(xún)操作;
存在警告信息的查詢(xún)語(yǔ)句;
不涉及任何表或視圖的查詢(xún)語(yǔ)句;
某用戶(hù)只有列級(jí)別權(quán)限的查詢(xún)語(yǔ)句;
查詢(xún)緩存的優(yōu)缺點(diǎn):
不需要對(duì)SQL語(yǔ)句做任何解析和執(zhí)行,當(dāng)然語(yǔ)法解析必須通過(guò)在先,直接從Query Cache中獲得查詢(xún)結(jié)果;
查詢(xún)緩存的判斷規(guī)則,不夠智能,也即提高了查詢(xún)緩存的使用門(mén)檻,降低其效率;
Query Cache的起用,會(huì)增加檢查和清理Query Cache中記錄集的開(kāi)銷(xiāo),而且存在SQL語(yǔ)句緩存的表,每一張表都只有一個(gè)對(duì)應(yīng)的全局鎖;
配置
是否啟用mysql查詢(xún)緩存,可以通過(guò)2個(gè)參數(shù):query_cache_type和query_cache_size,其中任何一個(gè)參數(shù)設(shè)置為0都意味著關(guān)閉查詢(xún)緩存功能,但是正確的設(shè)置推薦query_cache_type=0。
query_cache_type
值域?yàn)椋? -
主站蜘蛛池模板:
波密县|
达日县|
神木县|
嘉义县|
同江市|
吉安市|
阜阳市|
本溪市|
遵义县|
铜陵市|
布拖县|
佛冈县|
科技|
蓬溪县|
长寿区|
琼结县|
探索|
永康市|
抚远县|
化隆|
上虞市|
扬州市|
安泽县|
满城县|
黔西|
天峨县|
繁昌县|
甘肃省|
宣化县|
陇川县|
沁源县|
西乡县|
孟州市|
合水县|
石楼县|
金山区|
饶河县|
保定市|
万宁市|
廊坊市|
屏山县|