首页 > MySQL > MySQL Query Cache 运行参数及状态检测

MySQL Query Cache 运行参数及状态检测

MySQL的Query Cache系统变量都是以“query_cache“作为前后缀的,它们分别是:

have_query_cache
query_cache_limit
query_cache_min_res_unit
query_cache_size
query_cache_type
query_cache_wlock_invalidate

其中”have_query_cache“变量标识是QueryCache是否可用。可通过以下命令查看:

通常这个变量值为YES,即使QueryCache功能不可用的时候:当“query_cache_size”的值为0的时候,即使”have_query_cache=YES”,QueryCache也不可用。

标准版MySQL中“query_cache_size”为0,也即,默认配置下QueryCache是不可用的。

我们可以通过配置文件、启动参数和命令设置相关参数。如通过”SET”命令设置“query_cache_size”:

全局设置:mysql> SET GLOBAL query_cache_size = 1048576;
会话设置:mysql> SET SESSION query_cache_size = 1048576;

      如果你使用的时候标准 MySQL 分发版的话,Query Cache 功能默认都是打开的,我们可以通过调整 MySQL Server 的参数选项打开该功能。它们主要由以下5个参数构成:

  • query_cache_limit:允许 Cache 的单条 Query 结果集的最大容量,默认是1MB,超过此参数设置的 Query 结果集将不会被 Cache
  • query_cache_min_res_unit:设置 Query Cache 中每次分配内存的最小空间大小,也就是每个 Query 的 Cache 最小占用的内存空间大小
  • query_cache_size:设置 Query Cache 所使用的内存大小,默认值为0,大小必须是1024的整数倍,如果不是整数倍,MySQL 会自动调整降低最小量以达到1024的倍数。
    query_cache_size最小值不能小于40KB,否则系统将会产生一个WARNING:Query cache failed to set size 39936;new query cache size is 0.
  • query_cache_type:控制 Query Cache 功能的开关,可以设置为0(OFF),1(ON)和2(DEMAND)三种,意义分别如下:
    • 0(OFF):关闭 Query Cache 功能,任何情况下都不会使用 Query Cache
    • 1(ON):开启 Query Cache 功能,但是当 SELECT 语句中使用的 SQL_NO_CACHE 提示后,将不使用Query Cache
    • 2(DEMAND):开启 Query Cache 功能,但是只有当 SELECT 语句中使用了 SQL_CACHE 提示后,才使用 Query Cache
  • query_cache_wlock_invalidate:控制当有写锁定发生在表上的时刻是否先失效该表相关的 Query Cache,如果设置为 1(TRUE),则在写锁定的同时将失效该表相关的所有 Query Cache,如果设置为0(FALSE)则在锁定时刻仍然允许读取该表相关的 Query Cache。

系统的 Query Cache 的运行状态参数
MySQL 提供了一系列的 Global Status 来记录 Query Cache 的当前状态,具体如下:

  • 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 数量

可以根据这几个状态计算出 Cache 命中率,计算出 Query Cache 大小设置是否足够,通常不建议将 Query Cache 的大小设置超过256MB,这也是业界比较常用的做法。

分类: MySQL 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

=1加8(必填)请输入两数相加的结果。