`
swincle
  • 浏览: 78069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何使用MySQL的Query Cache

 
阅读更多

MySQL Query Cache故名思义就是用来缓存和查询相关的数据的。听说这个东东很好用,于是趁着博客搬迁的时候顺便在VPS开启了。而且开启了Memcache,现在 已经是内存级的数据库缓存了。不过还是想加一个webserver cache,最好是nginx,因为对这个稍微熟悉一点,过作为缓存的话varnish会比nginx好很多,要是有空的话还是想学习下VCL。回到正 题,接下来就记录下MySQL Query Cache的一些参数,以及怎么去设置等问题…

几个重要的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 | 0 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+——————————+———+
6 rows in set (0.00 sec)

 

1.query_cache_limit:允许使用MySQL Query Cache 的单条Query 结果集的最大容量,默认是1MB。当超过此参数设置的Query结果集大小的时候,MySQL将没有办法使用 Query Cache。

2.query_cache_min_res_unit:设置 Query Cache 中每次分配内存的最小空间大小,也就是每个Query 的Cache 最小占用的内存空间大小。

3.query_cache_size:Query Cache所使用的内存大小,默认为0(其实就是没有使用Query Cache)。这个值必须是1024的整数倍,如果不是1024的整数倍,则调整为小一级的1024的整数倍。

4.query_cache_type:是否使用MySQL Query Cache的功能性开关,它有三种可能性的值

 

  • 0:关闭MySQL Query Cache功能,任何情况下不会使用MySQL Query Cache功能。
  • 1:开启MySQL Query Cache功能,仅当SELECT语句中使用SELECT SQL_NO_CANCHE时,不用Query Cache
  • 2:开启MySQL Query Cache功能,仅当SELECT语句中使用SELECT SQL_CANCHE时,用Query Cache

5.query_cache_wlock_invalidate:当有写锁定发生在表上时,是否先失效该表相关的Query Cache。

  • 如果设置为1(TRUE):则在写锁定的同时将失效该表相关的所有 Query Cache
  • 如果设置为0(FALSE):则在锁定时刻仍然允许读取该表相关的 Query Cache

几个重要的MySQL Query Cache状态值

mysql> show status like ‘%Qcache%’;
+————————-+——-+
| Variable_name | Value |
+————————-+——-+
| Qcache_free_blocks | 0 |缓存中有多少未被使用空闲的内存块
| Qcache_free_memory | 0 |可用的缓存空间
| Qcache_hits | 0 |缓存命中的次数
| Qcache_inserts | 0 |没有使用缓存的查询次数,也就是没有命中的次数
| Qcache_lowmem_prunes | 0 |由于内存不足导致被删除的缓存条目数量
| Qcache_not_cached | 0 |无法被缓存的查询的数量,这个值越小越好
| Qcache_queries_in_cache | 0 |当前被cache的查询数量
| Qcache_total_blocks | 0 |当前使用的内存块的数量
+————————-+——-+
8 rows in set (0.00 sec)

 

如何设置MySQL Query Cache参数

1.开启query_cache_type

mysql> show variables like ‘%query_cache_type%’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| query_cache_type | OFF |
+——————+——-+
1 row in set (0.00 sec)

mysql> set @@global.query_cache_type = on;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like ‘%query_cache_type%’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| query_cache_type | ON |
+——————+——-+
1 row in set (0.00 sec)

 

2.设置query_cache_size值大小

mysql> show variables like ‘%query_cache_size%’;
+——————+——-+
| Variable_name | Value |
+——————+——-+
| query_cache_size | 0 |
+——————+——-+
1 row in set (0.00 sec)

mysql> set @@global.query_cache_size = 2*1024*1024;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like ‘%query_cache_size%’;
+——————+———+
| Variable_name | Value |
+——————+———+
| query_cache_size | 2097152 |
+——————+———+
1 row in set (0.00 sec)

 

 

MySQL Query Cache参数值变化情况

1.没有执行查询语句之前的MySQL Query Cache状态

mysql> show status like ‘%Qcache%’;
+————————-+———+
| Variable_name | Value |
+————————-+———+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 2088472 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 0 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+————————-+———+
8 rows in set (0.00 sec)

2.执行查询语句

mysql> select count(1) FROM tb_DBA_test;
+———-+
| count(1) |
+———-+
| 890089 |
+———-+
1 row in set (0.00 sec)

3.执行查询语句之后的MySQL Query Cache状态

mysql> show status like ‘%Qcache%’;
+————————-+———+
| Variable_name | Value |
+————————-+———+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 2086936 |
| Qcache_hits | 0 |
| Qcache_inserts | 1 |查询缓存生效,已经放入缓存
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 0 |
| Qcache_queries_in_cache | 1 |
| Qcache_total_blocks | 4 |
+————————-+———+
8 rows in set (0.00 sec)

 

4.再次执行查询语句

mysql> select count(1) FROM tb_DBA_test;
+———-+
| count(1) |
+———-+
| 890089 |
+———-+
1 row in set (0.00 sec)

 

5.查看MySQL Query Cache状态

mysql> show status like ‘%Qcache%’;
+————————-+———+
| Variable_name | Value |
+————————-+———+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 2086936 |
| Qcache_hits | 1 |缓存命中率增加1
| Qcache_inserts | 1 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 0 |
| Qcache_queries_in_cache | 1 |
| Qcache_total_blocks | 4 |
+————————-+———+
8 rows in set (0.00 sec)

 

清空MySQL Query Cache

1.Flush Query Cache

这个操作不会删除缓存的内容,它是把所有的存储块向上移动,把所有的空闲块向下移动合并到可用内存中去。它在运行时候会锁定整个服务器,阻止访问缓存,但通常这个操作很快,除非缓存的内容很大。

mysql> flush query cache;
Query OK, 0 rows affected (0.00 sec)

2.Reset Query Cache

清空查询缓存的命令。

mysql> show status like ‘%Qcache%’;
+————————-+———+
| Variable_name | Value |
+————————-+———+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 2086936 |
| Qcache_hits | 2 |
| Qcache_inserts | 1 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 0 |
| Qcache_queries_in_cache | 1 |
| Qcache_total_blocks | 4 |
+————————-+———+
8 rows in set (0.00 sec)

mysql> reset query cache;
Query OK, 0 rows affected (0.00 sec)

mysql> show status like ‘%Qcache%’;
+————————-+———+
| Variable_name | Value |
+————————-+———+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 2088472 |
| Qcache_hits | 2 |
| Qcache_inserts | 1 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 0 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+————————-+———+
8 rows in set (0.00 sec)

分享到:
评论

相关推荐

    Mycat处理连接数据库8.0以上程序报错query_cache_size

    然而,当Mycat与MySQL 8.0及以上版本配合使用时,可能会遇到一些兼容性问题,其中“query_cache_size”报错就是典型的例子。 在MySQL 8.0中,查询缓存功能被默认禁用,并且在某些版本中被完全移除。这是由于MySQL...

    解决mycatJDBC8驱动连接Mycat1.6报错 Unknown system variable 'query_cache_size'

    这个问题出现的原因在于MySQL 8.0版本中移除了`query_cache`相关的系统变量和功能,因此在使用新版本的JDBC驱动去连接旧版Mycat(可能基于较早版本的MySQL)时,会因找不到这个变量而抛出错误。 首先,我们需要理解...

    MySQL高速缓存启动方法及参数详解(query_cache_size)

    会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:...

    对于mysql的query_cache认识的误区

    如果空格是加在query之前,比如是在query的起始处加了空格,这样是丝毫不影响query cache的结果的,mysql认为这是一条query, 而如果空格是在query中,那会影响query cache的结果,mysql会认为是不同的query

    MySQL的Query Cache原理分析

    总之,MySQL的Query Cache是一个有效的性能优化工具,但需要谨慎配置和使用,特别是在处理频繁更新的表和高度分散的查询时。通过监控和调整相关参数,可以最大化其在特定工作负载下的性能提升。

    MySQL的学习笔记和一些实例.zip

    4. 缓存机制:使用MySQL Query Cache缓存查询结果,提升响应速度。 综上所述,MySQL的学习涵盖了数据库设计、SQL语法、索引、视图、存储过程、事务处理等多个方面。通过深入学习和实践,你可以掌握MySQL的基本操作...

    MSQL问题集合,线上环境到底要不要开启query cache

    Query Cache 的使用也需要注意以下几点: 1. QC 严格要求 2 次 SQL 请求要完全一样,包括 SQL 语句,连接的数据库、协议版本、字符集等因素都会影响。 2. QC 不适用于子查询或者外层查询、存储过程、存储函数、...

    MySQL查询加速器:利用Query Cache提升效率

    - **易于使用**:MySQL提供了简单直观的界面和丰富的文档,便于用户学习和使用。 - **可扩展性**:MySQL支持从小型应用到大型企业级应用的扩展。 - **社区支持**:由于其广泛的使用,MySQL拥有一个活跃的开发者社区...

    2016PHP面试题

    - **缓存机制**:使用MySQL Query Cache或其他缓存技术减少数据库负载。 - **分区表**:对大型表进行分区以提高性能。 - **数据库设计**:合理的数据库结构设计可以减少查询时间。 #### 9. 下面&a的结果是? ```php...

    mysql参数及其优化

    query_cache_size、query_cache_type、innodb_buffer_pool_size、innodb_log_file_size、innodb_log_buffer_size、innodb_flush_logs_at_trx_commit、transaction_isolation、innodb_file_per_table、innodb_open_...

    MySQL取消了Query Cache的原因

    MySQL之前有一个查询缓存Query Cache,从8.0开始,不再使用这个查询缓存,那么放弃它的原因是什么呢?在这一篇里将为您介绍。 MySQL查询缓存是查询结果缓存。它将以SEL开头的查询与哈希表进行比较,如果匹配,则返回...

    mysql题库完整版

    - 所有查询都被成功配置为使用Query Cache。 最近,查询响应时间开始增加,原因已被正确识别为访问Web服务的并发用户数量增加。 基于提供的信息,最可能的原因是什么? - **A. The Query Cache is pruning ...

    mysql常用配置参数和状态变量

    7. Query_cache_limit:Query Cache 存放的单条 Query 最大 Result set(结果集),默认 1MB。 8. Qcache_free_memory:Query Cache 中目前剩余的内存大小。通过这个参数可以较为准确的观察出当前系统中的 Query ...

    mysql优化.txt

    ### MySQL Key Cache 优化详解 在MySQL数据库管理系统中,针对不同的存储引擎,有着不同的缓存机制来提升查询性能。本文将重点围绕MyISAM表类型的key cache进行详细讲解,并涉及InnoDB存储引擎的相关特性,以及...

    MySQL-Flush命令用法.docx#资源达人分享计划#

    使用 QUERY CACHE 选项可以整理查询缓存,以便更好的记忆查询结果。但是,flush query cache; 命令不会清空查询缓存,只有 flush tables 或者 reset query cache; 命令才会清空缓存。 6. STATUS:把当前会话的参数...

Global site tag (gtag.js) - Google Analytics