mysql数据库内存缓存设置 mysql 查询缓存

MySQL查询缓存什么是MySQL查询缓存MySQL 缓存机制就是缓存 sql 文本及缓存结果,用 KV 形式保存再服务器内存中,如果运行相同的 sql,服务器直接从缓存中去获取结果,不需要在再去解析、优化、执行 sql 。
如果这个表修改了,那么使用这个表中的所有缓存将不再有效,查询缓存值得相关条目将被清空 。表中得任何改变是值表中任何数据或者是结构的改变,包括 insert, update, delete, truncate, alter table, drop table 或者是 drop database 包括那些映射到改变了的表的使用 merge 表的查询,显然,对于频繁更新的表,查询缓存不合适,对于一些不变的数据且有大量相同 sql 查询的表,查询缓存会节省很大的性能 。
命中条件缓存存在一个 hash 表中,通过查询 SQL,查询数据库,客户端协议等作为 key,在判断命中前,mysql 不会解析 SQL,而是使用 SQL 去查询缓存,SQL 上的任何字符的不同,如空格,注释,都会导致缓存不命中 。如果查询有不确定的数据 like now(),current_date(),那么查询完成后结果者不会被缓存,包含不确定的数的是不会放置到缓存中 。
工作流程

  1. 服务器接收 SQL,以 SQL 和一些其他条件为 key 查找缓存表 。
  2. 如果找到了缓存,则直接返回缓存 。
  3. 如果没有找到缓存,则执行 SQL 查询,包括原来的 SQL 解析,优化等 。
  4. 【mysql数据库内存缓存设置 mysql 查询缓存】执行完 SQL 查询结果以后,将 SQL 查询结果缓存入缓存表 。
MySQL查询缓存配置下面是关于 Query Cache 相关参数:
  • query_cache_size: 设置 Query Cache 所使用的内存大小,默认值为 0,大小必须是 1024 的整数倍,如果不是整数倍,MySQL 会自动调整降低最小量以达到 1024 的倍数 。
  • query_cache_type: 控制 Query Cache 功能的开关,可以设置为 0(OFF),1(ON) 和 2(DEMAND) 三种:0 表示关闭 Query Cache 功能,任何情况下都不会使用 Query Cache;1 表示开启 Query Cache 功能,但是当 SELECT 语句中使用的 SQL_NO_CACHE 提示后,将不使用 Query Cache;2(DEMAND) 表示开启 Query Cache 功能,但是只有当 SELECT 语句中使用了 SQL_CACHE 提示后,才使用 Query Cache 。
  • query_cache_limit: 允许 Cache 的单条 Query 结果集的最大容量,默认是 1MB,超过此参数设置的 Query 结果集将不会被 Cache 。
  • query_cache_min_res_unit: 设置 Query Cache 中每次分配内存的最小空间大小,也就是每个 Query 的 Cache 最小占用的内存空间大小 。
  • query_alloc_block_size: 缓存的块大小,默认为 8192 字节 。
  • query_cache_wlock_invalidate: 控制当有写锁加在表上的时候,是否先让该表相关的 Query Cache 失效,1(TRUE),在写锁定的同时将使该表相关的所有 Query Cache 失效 。0(FALSE),在锁定时刻仍然允许读取该表相关的 Query Cache 。
  • Qcache_lowmem_prunes: 这是一个状态变量(show status),当缓存空间不够需要释放旧的缓存时,该值会自增 。
  • Qcache_free_blocks: 目前还处于空闲状态的 Query Cache 中内存 Block 数目 。
  • Qcache_free_memory: 目前还处于空闲状态的 Query Cache 内存总量 。
  • Qcache_hits: Query Cache 命中次数 。
  • Qcache_inserts: 向 Query Cache 中插入新的 Query Cache 的次数,也就是没有命中的次数 。
  • Qcache_lowmem_prunes: 当 Query Cache 内存容量不够,需要从中删除老的 Query Cache 以给新的 Cache 对象使用的次数 。
  • Qcache_not_cached: 没有被 Cache 的 SQL 数,包括无法被 Cache 的 SQL 以及由于 query_cache_type 设置的不会被 Cache 的 SQL 。
  • Qcache_queries_in_cache: 目前在 Query Cache 中的 SQL 数量 。
  • Qcache_total_blocks: Query Cache 中总的 Block 数量 。

    秒懂生活扩展阅读