`
jsczxy2
  • 浏览: 1275074 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

设置mysql缓存

阅读更多

MySQL query cache4.1版本开始提供了,不过值今天本人才对其进行研究。默认配置下,MySQL的该功能是没有启动的,可能你通过show variables like '%query_cache%';会发现其变量have_query_cache的值是yes,MYSQL初学者很容易以为这个参数为YES就代表开启了查询缓存,实际上是不对的,该参数表示当前版本的MYSQL是否支持Query Cache,实际上是否开启查询缓存是看另外一个参数的值:query_cache_size ,该值为0,表示禁用query cache,而默认配置正是配置为0

配置方法:

MYSQL的配置文件my.inimy.cnf中找到如下内容:

# Query cache is used to cache SELECT results and later return them

# without actual executing the same query once again. Having the query

# cache enabled may result in significant speed improvements, if your

# have a lot of identical queries and rarely changing tables. See the

# "Qcache_lowmem_prunes" status variable to check if the current value

# is high enough for your load.

# Note: In case your tables change very often or if your queries are

# textually different every time, the query cache may result in a

# slowdown instead of a performance improvement.

query_cache_size=0

以上信息是默认配置,其注释意思是说,MYSQL的查询缓存用于缓存select查询结果,并在下次接收到同样的查询请求时,不再执行实际查询处理而直接返回结果,有这样的查询缓存能提高查询的速度,使查询性能得到优化,前提条件是你有大量的相同或相似的查询,而很少改变表里的数据,否则没有必要使用此功能。可以通过Qcache_lowmem_prunes变量的值来检查是否当前的值满足你目前系统的负载。注意:如果你查询的表更新比较频繁,而且很少有相同的查询,最好不要使用查询缓存。

具体配置方法:

1. query_cache_size设置为具体的大小,具体大小是多少取决于查询的实际情况,但最好设置为1024的倍数,参考值32M

2. 增加一行:query_cache_type=1

query_cache_type参数用于控制缓存的类型,注意这个值不能随便设置,必须设置为数字,可选项目以及说明如下:

 

选项

含义

0

(OFF, 不缓存或重新得到结果)

1

(ON, 缓存所有的结果,除了 SELECT SQL_NO_CACHE ... 查询)

2

(DEMAND, 仅缓存 SELECT SQL_CACHE ... 查询)

 

如果设置为0,那么可以说,你的缓存根本就没有用,相当于禁用了。但是这种情况下query_cache_size设置的大小系统是否要为其分配呢,这个问题有待于测试?

如果设置为1,将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存。

如果设置为2,则只缓存在select语句中通过SQL_CACHE指定需要缓存的查询。

 

OK,配置完后的部分文件如下:

query_cache_size=128M

query_cache_type=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             | 134217728 |

| query_cache_type             | ON        |

| query_cache_wlock_invalidate | OFF       |

+------------------------------+-----------+

6 rows in set (0.00 sec)

主要看query_cache_sizequery_cache_type的值是否跟我们设的一致:

这里query_cache_size的值是134217728,我们设置的是128M,实际是一样的,只是单位不同,可以自己换算下:134217728 = 128*1024*1024

query_cache_type设置为1,显示为ON,这个前面已经说过了。

 

总之,看到上边的显示表示设置正确,但是在实际的查询中是否能够缓存查询,还需要手动测试下,我们可以通过show status like '%Qcache%';语句来测试,现在我们开启了查询缓存功能,在执行查询前,我们先看看相关参数的值:

mysql> show status like '%Qcache%';

+-------------------------+-----------+

| Variable_name           | Value     |

+-------------------------+-----------+

| Qcache_free_blocks      | 1         |

| Qcache_free_memory      | 134208800 |

| Qcache_hits             | 0         |

| Qcache_inserts          | 0         |

| Qcache_lowmem_prunes    | 0         |

| Qcache_not_cached       | 2         |

| Qcache_queries_in_cache | 0         |

| Qcache_total_blocks     | 1         |

+-------------------------+-----------+

8 rows in set (0.00 sec)

这里顺便解释下这个几个参数的作用:

Qcache_free_blocks:表示查询缓存中目前还有多少剩余的blocks,如果该值显示较大,则说明查询缓存中的内存碎片过多了,可能在一定的时间进行整理。

Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。

Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。

Qcache_inserts:表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这很正常。

Qcache_lowmem_prunes:该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。

Qcache_not_cached: 表示因为query_cache_type的设置而没有被缓存的查询数量。

Qcache_queries_in_cache:当前缓存中缓存的查询数量。

Qcache_total_blocks:当前缓存的block数量。

 

下边我们测试下:

比如执行如下查询语句

mysql> select * from user where id = 2;

+----+-------+

| id | name  |

+----+-------+

|  2 | test2 |

+----+-------+

1 row in set (0.02 sec)

然后执行show status like '%Qcache%',看看有什么变化:

mysql> show status like '%Qcache%';

+-------------------------+-----------+

| Variable_name           | Value     |

+-------------------------+-----------+

| Qcache_free_blocks      | 1         |

| Qcache_free_memory      | 134207264 |

| Qcache_hits             | 0         |

| Qcache_inserts          | 1         |

| Qcache_lowmem_prunes    | 0         |

| Qcache_not_cached       | 3         |

| Qcache_queries_in_cache | 1         |

| Qcache_total_blocks     | 4         |

+-------------------------+-----------+

8 rows in set (0.00 sec)

 

对比前面的参数值,我们发现Qcache_inserts变化了。Qcache_hits没有变,下边我们在执行同样的查询
select * from user where id = 2
,按照前面的理论分析:Qcache_hits应该等于1,而Qcache_inserts应该值不变(其他参数的值变化暂时不关注,读者可以自行测试),再次执行:

show status like '%Qcache%',看看有什么变化:

mysql> show status like '%Qcache%';

+-------------------------+-----------+

| Variable_name           | Value     |

+-------------------------+-----------+

| Qcache_free_blocks      | 1         |

| Qcache_free_memory      | 134207264 |

| Qcache_hits             | 1         |

| Qcache_inserts          | 1         |

| Qcache_lowmem_prunes    | 0         |

| Qcache_not_cached       | 4         |

| Qcache_queries_in_cache | 1         |

| Qcache_total_blocks     | 4         |

+-------------------------+-----------+

8 rows in set (0.00 sec)

 

OK,果然跟我们分析的完全一致。

分享到:
评论

相关推荐

    mysql缓存查询和设置

    mysql缓存查询和设置global_query_cache_size

    MysqL缓存的解决方案

    "MySQL缓存的解决方案" MySQL 缓存是提高数据库性能的一种重要手段,它可以减少数据库的读写次数,从而提高系统的整体性能。以下将对 MySQL 缓存的解决方案进行详细的介绍。 缓存的必要性 缓存的主要目的是减少...

    MySQL缓存研究

    研究结论通常会总结优化缓存对MySQL性能提升的具体效果,指出哪些策略最有效,以及在特定工作负载下如何选择最佳的缓存设置。 7. 总结 通过对MySQL缓存的深入研究,我们可以理解缓存在数据库性能中的关键作用,学习...

    redis做mysql缓存服务器(公司内部培训资料)

    ### Redis作为MySQL缓存服务器(公司内部培训资料) #### 一、Redis简介 Redis是一种开源的键值存储系统,主要用于高速缓存数据。与Memcached相比,虽然两者都基于内存进行数据存储以确保高效率,但Redis具备更...

    mysql缓存优化

    ### MySQL缓存优化详解 #### 一、MySQL存储引擎概览与选择 ##### 1.1 存储引擎类型 MySQL 提供了多种存储引擎,每种引擎都有其独特的优势和适用场景。以下是最常见的几种存储引擎: - **MyISAM**:MySQL 的默认...

    Mysql 缓存

    要启用查询缓存并设置内存大小,可以在MySQL的配置文件(如my.cnf或my.ini)中添加以下行: ```ini query_cache_size = 16M ``` 这将设置查询缓存的大小为16MB。当然,你可以根据服务器的内存大小和系统负载来调整...

    mysql8的配置文件,包含端口 缓存配置

    mysql8的安装配置文件 包含端口 缓存 用户名密码的配置

    mysql缓冲和缓存设置详解

    MySQL 可调节设置可以应用于整个 mysqld进程,也可以应用于单个客户机会话。 服务器端的设置 每个表都可以表示为磁盘上的一个文件,必须先打开,后读取。为了加快从文件中读取数据的过程,mysqld对这些打开文件进行...

    提高MySql查询性能 - 打开和设置查询缓存 视频教程

    提高MySql查询性能 - 打开和设置查询缓存 视频教程 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等等好多知识

    MysqlHelper.cs带注释带缓存带MySql.Data.dll

    - 缓存机制:`MysqlHelper`可能会包含一个缓存层,如使用`System.Runtime.Caching`命名空间中的`MemoryCache`类,来存储频繁查询的结果,减少对数据库的访问,提高性能。 - 缓存策略:缓存的添加、过期和清理策略...

    C/C++实现mysql数据库的缓存管理

    C/C++实现mysql数据库的缓存管理 Linux下用C/C++写一个提高mysql数据库效率的数据缓存模块 缓存管理 window下用C/C++写一个提高mysql数据库效率的数据缓存模块 C/C++ mysql缓存 缓存 PS:记得要先把数据库给搭建起来

    mysql查询缓存

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

    MySQL必知必会(完美版)

    - 内存优化:合理设置MySQL缓存大小。 - 硬件优化:使用SSD硬盘等高性能硬件设备。 8. **安全策略** - 用户权限管理:使用GRANT语句授予用户权限。 - 加密传输:确保数据传输过程中的安全性。 - 定期审计:...

    服务器缓存设置 工具

    服务器缓存是提升网站或应用性能...服务器缓存设置和管理是一项细致而重要的工作,需要根据实际业务需求和服务器资源状况灵活调整。正确运用服务器缓存工具,可以显著提升系统效率,为用户提供更快、更稳定的访问体验。

    C-C++实现mysql数据库的缓存管理【附带编译及使用说明】

    C/C++实现mysql数据库的缓存管理 Linux下用C/C++写一个提高mysql数据库效率的数据缓存模块 缓存管理 window下用C/C++写一个提高mysql数据库效率的数据缓存模块 C/C++ mysql缓存 缓存 PS:记得要先把数据库给搭建起来

    释放MySQL潜能:深入配置缓存机制

    ### 释放MySQL潜能:深入...通过具体的代码示例和策略建议,旨在帮助读者更好地理解和实施MySQL缓存配置,提升数据库的处理能力和用户体验。记住,缓存虽然重要,但也需要根据实际情况灵活调整,以达到最佳性能表现。

    mysql 设置查询缓存

    可将如下语句 query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576 存放到/etc/my.cnf文件的[mysqld]下 然后重启mysql数据库 service mysqld restart 就会启动mysql的缓存机制Query ...

    MySQL优化之缓存优化(续)

    MySQL缓存优化是数据库性能提升的关键一环,尤其在高并发和大数据量的场景下,合理利用缓存能显著减少磁盘I/O操作,提高查询速度。本文将深入探讨MySQL中的各种缓存机制及其优化策略。 首先,我们关注的是查询缓存...

Global site tag (gtag.js) - Google Analytics