美文网首页软件测试
MySQL的缓存(Query Cache)

MySQL的缓存(Query Cache)

作者: 卫青臣 | 来源:发表于2021-03-11 17:31 被阅读0次

    1、MySQL Query Cache

    query cache是MySQL数据库用于缓存select语句以及语句的结果集。该缓存在技术细节上类似键值对存储,将select语句和语句的查询结果集做了一个hash映射并保存在一定的内存区域中。当客户端发起sql查询时,query cache的查找逻辑是:先对sql进行相应的权限验证,接着通过query cache查找结果。它不需要经过Optimizer模块进行执行计划的分析优化,也不需要发送同任何存储引擎的交互,减少了大量的磁盘IO和CPU运算,所以有时候效率非常高。

    2、 设置参数

    可以通过调整MySQL的配置(通常在/etc/my.cnf)来设置query cache,主要有5个参数:

    • query_cache_limit
      允许缓存的单条查询结果集的最大容量,默认是1MB,超过此参数设置的查询结果集将不会被缓存
    • query_cache_min_res_unit
      设置查询缓存query cache每次分配内存的最小空间大小,即每个查询的缓存最小占用的内存
    • query_cache_size
      设置query cache所使用的内存大小,默认值为0,大小必须是1024的整数倍,如果不是,MySQL会自动调整降低最小量以达到1024的倍数
    • query_cache_type
      控制query cache功能的开关,有0、1、2三种模式
      0:关闭缓存,任何情况都不使用缓存
      1:开启缓存,但是当select语句中使用sql_no_cache时,不使用缓存
      2:开启缓存,但是只有当select语句中使用sql_cache时,才使用缓存
    • query_cache_wlock_invalidate
      控制当有写锁定发生在表上的时刻是否先失效该表相关的Query Cache,如果设置为 1(TRUE),则在写锁定的同时将失效该表相关的所有Query Cache,如果设置为0(FALSE)则在锁定时刻仍然允许读取该表相关的Query Cache。

    3、Query Cache和性能

    开启Query Cache功能可能并不能让系统性能有提升,有时反而会有下降。原因是MySql为了保证Query Cache缓存的内容和实际数据绝对一致,当某个数据表发生了更新、删除及插入操作,MySql都会强制使所有引用到该表的查询SQL的Query Cache失效。对于密集写操作,启用查询缓存后很可能造成频繁的缓存失效,间接引发内存激增及CPU飙升,对已经非常忙碌的数据库系统这是一种极大的负担。

    4、其他

    Query Cache因MySql的存储引擎不同而实现略有差异,比如MyISAM,缓存的结果集存储在OS Cache中,而最流行的InnoDB则放在Buffer Pool中。

    相关文章

      网友评论

        本文标题:MySQL的缓存(Query Cache)

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