• MySQL查询缓存


    MySQL查询缓存

    用于保存MySQL查询语句返回的完整结果,被命中时,MySQL会立即返回结果,省去解析、优化和执行等阶段。

    如何检查缓存?

    MySQL保存结果于缓存中:

    把SELECT语句本身做hash计算,计算结果为key,查询结果作为value。

    不会被缓存的数据:

    查询语句中有一些不确定数据时,不会缓存,例如NOW(),CURRENT_TIME(),一般来说,如果查询中包含自定义函数、存储函数、用户变量、临时表、mysql库中系统表、或者任何包含权限的表,一般都不会被缓存。

    缓存会带来额外开销:

    1、每个查询都得先检查是否命中;

    2、检查结果要先缓存;

    与缓存相关的变量:

    查看缓存变量SHOW GLOBAL VARIABLES LIKE 'query_cache%';

    query_cache_limit:单个缓存对象的最大值,超出的不缓存,手动使用SQL_NO_CACHE可以人为避免尝试缓存返回结果超出此参数限定值的语句。

    query_cache_min_res_unit:存储缓存的最小内存块;计算方法:(query_cache_size-Qcache_free_memory)/Qcache_queries_in_cache

    query_cache_size:总空间,单位为字节,大小必须是1024倍数。MySQL启动时,会一次分配并立即初始化这里指定大小的内存空间,这意味着,如果修改此大小,会清空缓存,并重新初始化;

    query_cache_type:查询缓存类型;是否开启缓存功能,开启方式有三种{ON|OFF|DEMAND};

    DEMAND:意味着SELECT语句明确使用SQL_CACHE选项是才会缓存;query_cache_wlock_invalidate:如果某个数据表被其他用户连接锁住了,是否仍然从缓存中返回结果,OFF表示返回。

    如何判断命中率:

    SHOW GLOBAL STATUS LIKE 'Qcache%';

    Qcache_free_blocks:空闲块数

    Qcache_free_memory:空闲空间

    Qcache_hits:命中次数

    Qcache_inserts:向缓存空间中写入缓存的次数

    Qcache_lowmem_prunes:因为内存小,腾出内存的次数

    Qcache_not_cached:没被缓存的个数

    Qcache_queries_in_cache:在缓存中缓存的插入的查询的个数

    Qcache_total_blocks:总块数

    碎片整理:FLUSH QUERY_CACHE

    清除缓存:RESET QUERY_CACHE

    计算命中率:

    SHOW GLOBAL STATUS WHERE Variable_name='Qcache_hits' OR Variable_name='Com_select';

    +---------------+-------+

    | Variable_name | Value |

    +---------------+-------+

    | Com_select    | 10     |

    | Qcache_hits   | 0      |

    +---------------+-------+

    Qcache_hits/( Com_select+ Qcache_hits)

    还需要参考命中和写入的比率,即Qcache_hits/ Qcache_inserts的值,此值如果能大于3:1,则表明缓存也是有效的,能达到10:1,为比较理想的情况。如果命中率很低,比值也徘徊在1:1,那说明缓存没什么卵用,还是关了吧。

    缓存优化思路:

    使用缓存时如何能够让缓存命中,提高缓存的有效性:

    1、批量写入而非多次单个写入,这样即可仅一次的影响缓存

    2、过大的缓存空间,可能会使大量的缓存失效时导致造成服务器假死,所以缓存空间不宜过大

    3、必要时,使用SQL_NO_CACHE手动控制缓存

    4、对写密集型的应用场景来说,禁用缓存反而能提高性能

  • 相关阅读:
    OCP-1Z0-053-V12.02-285题
    OCP-1Z0-053-V12.02-281题
    今天博客抽风了,我也抽风了
    OCP-1Z0-053-V12.02-278题
    OCP-1Z0-053-V12.02-271题
    OCP-1Z0-053-V12.02-269题
    OCP-1Z0-053-V12.02-256题
    OCP-1Z0-053-V12.02-249题
    OCP-1Z0-053-V12.02-248题
    OCP-1Z0-053-V12.02-244题
  • 原文地址:https://www.cnblogs.com/fansik/p/5550657.html
Copyright © 2020-2023  润新知