博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql查询缓存Query_cache的功用
阅读量:7113 次
发布时间:2019-06-28

本文共 2729 字,大约阅读时间需要 9 分钟。

MySQL的查询缓存并非缓存执行计划,而是查询及其结果集,这就意味着只有相同的查询操作才能命中缓存,因此MySQL的查询缓存命中率很低,另一方面,对于大结果集的查询,其查询结果可以从cache中直接读取,有效的提升了查询效率。

那么如何设置缓存的大小呢?来看一下:

1、在mysql客户端命令行中我们可以这么查看缓存是否开启以及缓存设置的大小:

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)

其中:

query_cache_type: 是否开启缓存功能,取值为ON, OFF, DEMAND,默认值为ON

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

query_cache_wlock_invalidate:表示当有其他客户端正在对MyISAM表进行写操作时,如果查询在query cache中,是否返回cache结果还是等写操作完成再读表获取结果。

query_cache_limit 指定单个查询能够使用的缓冲区大小,缺省为1M;

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

了解了以上的指标后我们就可以在mysql的配置文件my.cnf中进行设置。然后重启mysl服务器即可。在[mysqld]下面添加参数。一般是设置query_cache_size和query_cache_type两项。

2、上面查看的是我们进行缓存的配置,它一般从配置文件中读取值,但是有时候我们需要实时查看当前mysql中的数据缓存大小。

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)

解释:

      

Qcache_free_memory:缓存中的空闲内存。

Qcache_total_blocks:缓存中块的数量。

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

3、清空缓存:

flush query cache命令

 

加大缓存有助于我们查询的效率提高:

这里举个例子:

mysql> use mob_adnDatabase changedmysql> 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)

可以看到缓存真的很厉害。

还有的同学会想到innodb_buffer_pool这个参数,两者的作用与区别我会接着来讲。

顺便这里在讲解一下SQL几项优化(很好):

https://www.cnblogs.com/L-dongf/p/9163848.html

转载于:https://www.cnblogs.com/FengGeBlog/p/10144768.html

你可能感兴趣的文章
Eclipse中使用github
查看>>
解决LoggerFactory is not a Logback LoggerContext but Logback is on the classpath
查看>>
微软改名部又出动啦!微软宣布VSTS改名为Azure DevOps
查看>>
亲爱的老板:程序员的10分钟就是3个小时
查看>>
SQL Server 通过备份文件初始化复制
查看>>
Motion JPEG in Flash and Java
查看>>
Linq的分组功能
查看>>
使用 Jackson 树连接线形状
查看>>
学习mysql代码的方法和目标
查看>>
【读后感】暗时间
查看>>
终于找到IE10 Browser Mode为IE10 compat View的真相
查看>>
STL priority_queue<> 用法 <转>
查看>>
异常Address already in use: JVM_Bind的处理
查看>>
Unix/Linux 脚本中 “set -e” 的作用
查看>>
静观----冥想
查看>>
使用 IntraWeb (23) - 基本控件之 TIWTimer、TIWProgressBar、TIWProgressIndicator、TIWTimeEdit...
查看>>
SQLServer如何处理数据集的维度变化
查看>>
了解SVG
查看>>
【读书笔记-数据挖掘概念与技术】数据预处理
查看>>
嵌入式开发之davinci--- ccs 编译lib库
查看>>