Mysql查询缓存Query_cache的功用

mysql> show variables like '%query_cache%';
+------------------------------+-------------+
| Variable_name                | Value       |
+------------------------------+-------------+
| have_query_cache             | YES         |
| query_cache_limit            | 1048576     |
| query_cache_min_res_unit     | 4096        |
| query_cache_size             | 16106127360 |
| query_cache_type             | ON          |
| query_cache_wlock_invalidate | OFF         |
+------------------------------+-------------+
6 rows in set (0.01 sec)

其中:mysql

query_cache_type: 是否开启缓存功能,取值为ON, OFF, DEMAND,默认值为ON
  - 值为OFF或0时,查询缓存功能关闭;
  - 值为ON或1时,查询缓存功能打开,SELECT的结果符合缓存条件即会缓存,不然,不予缓存,显式指定SQL_NO_CACHE,不予缓存;
  - 值为DEMAND或2时,查询缓存功能按需进行,显式指定SQL_CACHE的SELECT语句才会缓存;其它均不予缓存sql

query_cache_wlock_invalidate:表示当有其余客户端正在对MyISAM表进行写操做时,若是查询在query cache中,是否返回cache结果仍是等写操做完成再读表获取结果。缓存

query_cache_limit 指定单个查询可以使用的缓冲区大小,缺省为1M;服务器

query_cache_min_res_unit为系统分配的最小缓存块大小,默认是4KB,设置值大对大数据查询有好处,但若是你的查询都是小数据查询,就容易形成内存碎片和浪费;query_cache_size:表示缓存的大小。ide

了解了以上的指标后咱们就能够在mysql的配置文件my.cnf中进行设置。而后重启mysl服务器便可。在[mysqld]下面添加参数。通常是设置query_cache_size和query_cache_type两项。大数据

二、上面查看的是咱们进行缓存的配置,它通常从配置文件中读取值,可是有时候咱们须要实时查看当前mysql中的数据缓存大小。spa

mysql> show status like '%qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 1        |
| Qcache_free_memory      | 1031832  |
| Qcache_hits             | 0        |
| Qcache_inserts          | 0        |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 16489053 |
| Qcache_queries_in_cache | 0        |
| Qcache_total_blocks     | 1        |
+-------------------------+----------+
8 rows in set (0.00 sec)

解释:orm

      

Qcache_free_memory:缓存中的空闲内存。blog

Qcache_total_blocks:缓存中块的数量。内存

Qcache_lowmem_prunes:缓存出现内存不足而且必需要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;若是这个 数字在不断增加,就表示可能碎片很是严重,或者内存不多。如何肯定就须要查看Qcache_free_blocks和Qcache_free_memory 两项指标。

三、清空缓存:

flush query cache命令

 

加大缓存有助于咱们查询的效率提升:

这里举个例子:

mysql> use mob_adn
Database changed
mysql> select count(*) from creative_output;
+----------+
| count(*) |
+----------+
| 87151154 |
+----------+
1 row in set (3 min 18.29 sec)

mysql> select count(*) from creative_output;
+----------+
| count(*) |
+----------+
| 87151154 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from creative_output;
+----------+
| count(*) |
+----------+
| 87151154 |
+----------+
1 row in set (0.00 sec)

能够看到缓存真的很厉害。

相关文章
相关标签/搜索