MySQL sql_cache缓存使用
有如下規(guī)則,如果數(shù)據(jù)表被更改,那么和這個(gè)數(shù)據(jù)表相關(guān)的全部Cache全部都會(huì)無(wú)效,并刪除之。這里“數(shù)據(jù)表更改”包括: INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP TABLE, or DROP DATABASE等。舉個(gè)例子,如果數(shù)據(jù)表posts訪(fǎng)問(wèn)頻繁,那么意味著它的很多數(shù)據(jù)會(huì)被QC緩存起來(lái),但是每一次posts數(shù)據(jù)表的更新,無(wú)論更新是不是影響到了cache的數(shù)據(jù),都會(huì)將全部和posts表相關(guān)的cache清除。如果你的數(shù)據(jù)表更新頻繁的話(huà),那么Query Cache將會(huì)成為系統(tǒng)的負(fù)擔(dān)。有實(shí)驗(yàn)表明,糟糕時(shí),QC會(huì)降低系統(tǒng)13%[1]的處理能力。
Query Cache相關(guān)參數(shù):
query_cache_size QC占用空間大小,通過(guò)將其設(shè)置為0關(guān)閉QC功能
query_cache_type 0表示關(guān)閉QC;1表示正常緩存;2表示SQL_CACHE才緩存
query_cache_limit 最大緩存結(jié)果集
query_cache_min_res_unit 手冊(cè)上說(shuō),QC會(huì)按照這個(gè)值分配緩存block的大小。
Qcache_lowmem_prunes 這是一個(gè)狀態(tài)變量(show status),當(dāng)緩存空間不夠需要??
???????????????????????????? ???? 釋放舊的緩存時(shí),該值會(huì)自增。
Qcache_hits??????????????? –表示sql在緩存中直接得到結(jié)果,不需要再去解析
have_query_cache??????????–查詢(xún)緩存是否可用
query_cache_limit???????????–可緩存具體查詢(xún)結(jié)果的最大值
query_cache_size???????????–查詢(xún)緩存的大小
query_cache_type???????????–阻止或是支持查詢(xún)緩存
set global query_cache_size = 600000; –設(shè)置緩存內(nèi)存
set session query_cache_type = ON; –開(kāi)啟查詢(xún)緩存
Qcache_free_blocks 緩存中相鄰內(nèi)存塊的個(gè)數(shù)。數(shù)目大說(shuō)明可能有碎片。
FLUSH QUERY CACHE 會(huì)對(duì)緩存中的碎片進(jìn)行整理,從而得到一個(gè)空閑塊。
Qcache_free_memory 緩存中的空閑內(nèi)存。
Qcache_hits 每次查詢(xún)?cè)诰彺嬷忻袝r(shí)就增大。
Qcache_inserts 每次插入一個(gè)查詢(xún)時(shí)就增大。命中次數(shù)除以插入次數(shù)就是不中比率;
????????????????????? 用1 減去這個(gè)值就是命中率。在上面這個(gè)例子中,
????????????????????? 大約有 87% 的查詢(xún)都在緩存中命中。
Qcache_lowmem_prunes 緩存出現(xiàn)內(nèi)存不足并且必須要進(jìn)行清理以便為更多查詢(xún)提供空
?????????????????????????? 間的次數(shù)。這個(gè)數(shù)字最好長(zhǎng)時(shí)間來(lái)看;如果這個(gè)數(shù)字在不斷增長(zhǎng),就
?????????????????????????? 表示可能碎片非常嚴(yán)重,或者內(nèi)存很少。(上面的 free_blocks 和
???????????????????????????free_memory 可以告訴您屬于哪種情況)。
Qcache_not_cached 不適合進(jìn)行緩存的查詢(xún)的數(shù)量,通常是由于這些查詢(xún)不是
???????????????????????????? SELECT 語(yǔ)句。
Qcache_queries_in_cache 當(dāng)前緩存的查詢(xún)(和響應(yīng))的數(shù)量。
Qcache_total_blocks 緩存中塊的數(shù)量。
?
1 通過(guò)配置實(shí)現(xiàn):只對(duì)“數(shù)據(jù)變動(dòng)少,select多”的table開(kāi)啟cache功能。(這個(gè)能否通過(guò)配置實(shí)現(xiàn),還需要調(diào)查,在mysql手冊(cè)中似乎沒(méi)有提到)
2 配置query_cache_type,同時(shí)改寫(xiě)程序。
query_cache_type 0 代表不使用緩沖, 1 代表使用緩沖,2 代表根據(jù)需要使用。
設(shè)置 1 代表緩沖永遠(yuǎn)有效,如果不需要緩沖,就需要使用如下語(yǔ)句:
SELECT SQL_NO_CACHE * FROM my_table WHERE …
如果設(shè)置為 2 ,需要開(kāi)啟緩沖,可以用如下語(yǔ)句:
SELECT SQL_CACHE * FROM my_table WHERE …
So,只要把query_cache_type設(shè)置為2,然后在需要提高select速度的地方,使用:
SELECT SQL_CACHE * FROM…
【mysql cache調(diào)試筆記】
1 可以使用下列命令開(kāi)啟mysql的select cache功能:
SET GLOBAL query_cache_size = 102400000;
因?yàn)楫?dāng)query_cache_size默認(rèn)為0時(shí),是不開(kāi)啟cache功能的。
2 調(diào)試:
查看cache的設(shè)置:
show variables like ‘%query_cache%’;
性能監(jiān)控:
show status like ‘%Qcache%’;
3 mysql cache的清理:
可以使用FLUSH QUERY CACHE語(yǔ)句來(lái)清理查詢(xún)緩存碎片以提高內(nèi)存使用性能。該語(yǔ)句不從緩存中移出任何查詢(xún)。
RESET QUERY CACHE語(yǔ)句從查詢(xún)緩存中移出所有查詢(xún)。FLUSH TABLES語(yǔ)句也執(zhí)行同樣的工作。
總結(jié)
以上是生活随笔為你收集整理的MySQL sql_cache缓存使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux从零开始(三、命令图解)
- 下一篇: mysql 如何清除sql缓存