今天在工作中無意發(fā)現(xiàn)數(shù)據(jù)監(jiān)控里不同的數(shù)據(jù)庫qcache_hits,數(shù)據(jù)不一樣。
從上圖可以看到量數(shù)據(jù)庫一個(gè)有qcache靴患,一個(gè)沒有qcache,這讓我有點(diǎn)迷茫,沒有qcache的A數(shù)據(jù)庫是線上的核心業(yè)務(wù)庫厘线,承載的量比較大。B數(shù)據(jù)庫作為曾經(jīng)是核心數(shù)據(jù)庫出革,現(xiàn)在業(yè)務(wù)已經(jīng)逐漸過渡到A數(shù)據(jù)庫造壮,現(xiàn)在僅存一些雜七雜八的業(yè)務(wù)在上面。作為業(yè)務(wù)從A數(shù)據(jù)遷移至B數(shù)據(jù)庫的全稱負(fù)責(zé)人員骂束,并沒有發(fā)現(xiàn)線上業(yè)務(wù)因?yàn)閝cache的不同而受到影響耳璧。反而性能比以前提升了不少。(具體數(shù)據(jù)就不列出了)
那就不得不去研究一下 qcache展箱。
什么是qcache旨枯?
MYSQL 查詢緩存,緩存保存查詢返回的完整結(jié)果析藕。當(dāng)查詢命中緩存立即返回結(jié)果召廷,跳過了解析凳厢、優(yōu)化和執(zhí)行的階段。
這句話什么意思呢竞慢?就是那個(gè)查詢的sql用哈希生成一個(gè)緩存key先紫,將結(jié)果直接緩存起來,sql 中任意字符的改變筹煮,哪怕是加一個(gè)空格都會(huì)導(dǎo)致緩存失效遮精。
當(dāng)查詢中有一些不能確定的數(shù)據(jù)時(shí),則不會(huì)被緩存败潦。例如包含NOW()或者CURRENT_DATE()的查詢不會(huì)被緩存本冲。
所以查詢中包含一個(gè)不確定函數(shù),MYSQL則不會(huì)查詢緩存劫扒。這句換是錯(cuò)誤的檬洞。
好了基本的概念我們了解了,現(xiàn)在去看看具體這兩個(gè)庫的具體設(shè)置沟饥。
SHOW VARIABLES LIKE '%query_cache%'; 查看緩存設(shè)置
這里有個(gè)迷惑人的配置添怔,have_query_cache. 查文檔得知
YES
if mysqld supports the query cache, NO
if not.
意思可以簡(jiǎn)單理解為,系統(tǒng)是否支持查詢緩存贤旷。所以這個(gè)參數(shù)不是開啟或者關(guān)閉qcache的參數(shù)广料。
這兩個(gè)參數(shù)才是
query_cache_size
query_cache_type
Property | Value |
---|---|
Command-Line Format | --query-cache-size=# |
Deprecated | 5.7.20 |
System Variable | [query_cache_size](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_query_cache_size) |
Scope | Global |
Dynamic | Yes |
Type | Integer |
Default Value | 1048576 |
Minimum Value | 0 |
Maximum Value (64-bit platforms) | 18446744073709551615 |
Maximum Value (32-bit platforms) | 4294967295 |
The amount of memory allocated for caching query results. By default, the query cache is disabled. This is achieved using a default value of 1M, with a default forquery_cache_type
of 0. (To reduce overhead significantly if you set the size to 0, you should also start the server with query_cache_type=0
.
從A庫和B庫的配置可以看出A庫是關(guān)閉了緩存而B庫開啟了緩存。
那我們來看一下緩存是否減少了慢查詢呢幼驶?
可以看出來慢查詢的對(duì)比不在一個(gè)數(shù)量級(jí)上艾杏。從這個(gè)角度來看DB的性能受到了慢查詢的影響。而qcache在我的業(yè)務(wù)場(chǎng)景下盅藻,沒有顯著的性能優(yōu)勢(shì)购桑。Db的主要優(yōu)化還要放在慢查詢上啊。
qcache和我們業(yè)務(wù)中所使用的緩存有許多不一樣的地方氏淑,單純的開啟qcache并不能提升性能其兴,有時(shí)性能還會(huì)受其所累。
那么具體我們應(yīng)該怎么使用qcache夸政,或者怎么去設(shè)置呢元旬?感興趣的讀者可以留言給我,如果有人想看的話守问,我會(huì)寫下一篇文章講解一下我的理解匀归。