美文网首页程序员
MYSQL QUERY CACHE 的基础学习

MYSQL QUERY CACHE 的基础学习

作者: Brown_ | 来源:发表于2018-11-21 15:08 被阅读31次

    今天在工作中无意发现数据监控里不同的数据库qcache_hits,数据不一样。


    A数据库
    B数据库

    从上图可以看到量数据库一个有qcache,一个没有qcache,这让我有点迷茫,没有qcache的A数据库是线上的核心业务库,承载的量比较大。B数据库作为曾经是核心数据库,现在业务已经逐渐过渡到A数据库,现在仅存一些杂七杂八的业务在上面。作为业务从A数据迁移至B数据库的全称负责人员,并没有发现线上业务因为qcache的不同而受到影响。反而性能比以前提升了不少。(具体数据就不列出了)
    那就不得不去研究一下 qcache。

    什么是qcache?

    MYSQL 查询缓存,缓存保存查询返回的完整结果。当查询命中缓存立即返回结果,跳过了解析、优化和执行的阶段。

    这句话什么意思呢?就是那个查询的sql用哈希生成一个缓存key,将结果直接缓存起来,sql 中任意字符的改变,哪怕是加一个空格都会导致缓存失效。

    当查询中有一些不能确定的数据时,则不会被缓存。例如包含NOW()或者CURRENT_DATE()的查询不会被缓存。

    所以查询中包含一个不确定函数,MYSQL则不会查询缓存。这句换是错误的。

    好了基本的概念我们了解了,现在去看看具体这两个库的具体设置。


    A数据库
    A数据库 B数据库 B数据库

    SHOW VARIABLES LIKE '%query_cache%'; 查看缓存设置

    这里有个迷惑人的配置,have_query_cache. 查文档得知
    YES if mysqld supports the query cache, NO if not.

    意思可以简单理解为,系统是否支持查询缓存。所以这个参数不是开启或者关闭qcache的参数。

    这两个参数才是
    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库是关闭了缓存而B库开启了缓存。
    那我们来看一下缓存是否减少了慢查询呢?


    A库慢查询 B库慢查询

    可以看出来慢查询的对比不在一个数量级上。从这个角度来看DB的性能受到了慢查询的影响。而qcache在我的业务场景下,没有显著的性能优势。Db的主要优化还要放在慢查询上啊。

    qcache和我们业务中所使用的缓存有许多不一样的地方,单纯的开启qcache并不能提升性能,有时性能还会受其所累。

    那么具体我们应该怎么使用qcache,或者怎么去设置呢?感兴趣的读者可以留言给我,如果有人想看的话,我会写下一篇文章讲解一下我的理解。

    相关文章

      网友评论

        本文标题:MYSQL QUERY CACHE 的基础学习

        本文链接:https://www.haomeiwen.com/subject/ghrcqqtx.html