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

mysql query cache从4.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.ini或my.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参数用于控制缓存的类型,注意这个值不能随便设置,必须设置为数字,可选项目以及说明如下:
解析MySQL高速缓存启动方法及参数(query_cache_size)

如果设置为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_size和query_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%’,看看有什么变化:

存了个图 存了个图

视频图片解析/字幕/剪辑,视频高清保存/图片源图提取

存了个图 17 查看详情 存了个图

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高速缓存启动方法及参数(query_cache_size)

–>

以上就是解析MySQL高速缓存启动方法及参数(query_cache_size)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/416859.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
沪电股份前三季度净利润17.8亿元-18.3亿元,同比预增102.97 %–108.66%
上一篇 2025年11月7日 01:40:47
C盘瘦身有什么方法_C盘瘦身有什么方法好用
下一篇 2025年11月7日 01:40:48

相关推荐

  • 解决SQL中父子表事务内自增主键关联插入的策略

    本教程详细阐述了在SQL数据库中,如何在同一事务内安全地处理父表自增主键的生成与子表关联插入的问题。核心在于利用数据库提供的特定函数,在父表插入后、事务提交前即时获取生成的自增主键,并将其用于子表的插入操作,从而确保数据的一致性和完整性。文章将提供MySQL、SQL Server和PostgreSQ…

    2026年9月8日
    000
  • MySQL数据同步工具与方法_实现异地数据一致性与高可用方案

    MySQL数据同步工具与方法_实现异地数据一致性与高可用方案MySQL数据同步工具与方法_实现异地数据一致性与高可用方案MySQL数据同步工具与方法_实现异地数据一致性与高可用方案MySQL数据同步工具与方法_实现异地数据一致性与高可用方案

    异地数据同步方案的选择取决于对一致性、可用性、性能和运维复杂度的权衡。1. 对于低延迟环境,可采用mysql原生复制,包括异步复制(高可用但一致性弱)或半同步复制(折中方案)。2. 对强一致性要求高的场景,推荐使用mysql group replication(mgr)或多主galera集群,但需注…

    2026年9月8日 用户投稿
    000
  • MySQL自动化运维脚本编写_定时备份、数据清理与监控实战

    MySQL自动化运维脚本编写_定时备份、数据清理与监控实战MySQL自动化运维脚本编写_定时备份、数据清理与监控实战MySQL自动化运维脚本编写_定时备份、数据清理与监控实战MySQL自动化运维脚本编写_定时备份、数据清理与监控实战

    mysql自动化运维可通过编写shell脚本结合cron定时任务实现,主要包括数据备份、数据清理和状态监控三大模块。1. 数据备份使用mysqldump进行逻辑备份,并添加事务一致性与binlog位置记录,压缩存储并按策略清理旧备份,失败时触发通知;2. 数据清理通过定期删除过期业务数据及binlo…

    2026年9月7日 用户投稿
    100
  • MySQL如何防止数据丢失_高可用架构设计要点?

    MySQL如何防止数据丢失_高可用架构设计要点?MySQL如何防止数据丢失_高可用架构设计要点?MySQL如何防止数据丢失_高可用架构设计要点?MySQL如何防止数据丢失_高可用架构设计要点?

    防止mysql数据丢失的核心是构建高可用架构,需从多层面系统性设计。1. 数据备份与恢复:包括全量、增量、逻辑和物理备份,并定期验证备份有效性;2. 主从复制:采用异步、半同步或组复制技术实现数据同步与故障转移;3. 读写分离:通过代理中间件或应用层实现流量分发;4. 故障自动转移:使用keepal…

    2026年9月7日 用户投稿
    100
  • MySQL数据压缩技术与性能影响_节省空间与保证速度平衡方案

    MySQL数据压缩技术与性能影响_节省空间与保证速度平衡方案MySQL数据压缩技术与性能影响_节省空间与保证速度平衡方案MySQL数据压缩技术与性能影响_节省空间与保证速度平衡方案MySQL数据压缩技术与性能影响_节省空间与保证速度平衡方案

    mysql数据压缩并非万能药,它在节省存储空间的同时会增加cpu开销并可能影响性能。1. 压缩通过减少磁盘i/o提升效率,但压缩和解压消耗cpu资源;2. buffer pool中解压后的数据占用内存,可能导致更多磁盘i/o;3. 频繁更新会引发写入放大问题,增加i/o负担;4. 选择压缩策略需分析…

    2026年9月7日 用户投稿
    100
  • Laravel Sanctum 在生产环境无法工作,但在本地环境正常

    本文旨在解决 Laravel Sanctum 在本地开发环境运行正常,但在生产环境出现 “Unauthenticated.” 错误的问题。主要原因是服务器 PHP 版本过低,Sanctum 需要 PHP 7.4 或更高版本才能正常运行。本文将提供详细的排查和解决方案,帮助开发…

    2026年9月7日
    000
  • mysql now怎么用

    mysql now是一个用于返回当前的日期和时间的函数,其语句用法如“SELECT NOW(),CURDATE(),CURTIME()”。 推荐:《mysql视频教程》 MySQL NOW() 函数 定义和用法 NOW() 返回当前的日期和时间。 语法 NOW() 实例 下面是 SELECT 语句:…

    2026年9月7日
    100
  • CentOS系统调优怎么操作_CentOS系统参数调优方法

    CentOS系统调优需逐步调整内核参数、磁盘I/O、网络及服务配置。修改/etc/sysctl.conf可优化vm.swappiness和vm.vfs_cache_pressure;使用noatime挂载文件系统提升磁盘性能;调整net.ipv4.tcp_tw_reuse和somaxconn增强网络…

    2026年9月7日
    000
  • mysql列修改怎么操作?

    mysql修改列的方法:1、使用“ALTER TABLE 表名 MODIFY 字段名称 字段类型 [完整性约束条件]”来修改列的数据类型;2、使用“ALTER TABLE 表名 CHANGE 旧列名 新列名 新数据类型;”来修改列的名称。 (推荐教程:mysql视频教程) 修改字段属性–…

    2026年9月7日
    000
  • 数据量大的App制作,数据库如何选型?

    在开发处理大量数据的应用程序时,数据库的选择至关重要。选择一个合适的数据库不仅能确保数据的存储效率和安全性,还能提升应用程序的整体性能和用户体验。以下将从几个关键方面探讨如何为数据量大的app选择合适的数据库。 首先,考虑数据量的大小。 对于数据量庞大的应用程序,首要考虑的是数据库的存储能力和扩展性…

    2026年9月7日
    000
  • mysql如何增加表中新的列?

    mysql中可以使用“ALTER TABLE”语句来增加表中新的列,语法格式“ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件];”;默认是在表的末尾添加新的列,如果配合使用FIRST关键字则可在开头添加新的列。 (推荐教程:mysql视频教程) mysql增加表中新列的方法: …

    2026年9月7日
    000
  • mysql连接不到本地数据库怎么办

    mysql连接不到本地数据库怎么办mysql连接不到本地数据库怎么办mysql连接不到本地数据库怎么办mysql连接不到本地数据库怎么办

    mysql连接不到本地数据库的解决办法:首先【win+r】打开运行,输入命令【services.msc】;然后找到MySQL,鼠标双击;最后依次点击【自动-启动-应用-确定】即可。 mysql连接不到本地数据库的解决办法: 1、可能是本地服务没开,需要开启本地服务,按 Win + r 运行这个命令,…

    2026年9月7日 用户投稿
    000
  • CentOS系统部署怎么操作_CentOS系统快速部署指南

    CentOS部署需先选择版本与安装模式,推荐生产环境使用AlmaLinux或Rocky Linux,优先采用最小化安装以提升安全性和性能;接着通过手动分区(建议包含/boot、swap、/、/var等)并启用LVM增强灵活性,配置网络、主机名及用户权限,设置强密码并创建带sudo权限的普通用户;安装…

    2026年9月7日
    000
  • MySQL中如何实现数据的多版本并发控制_MVCC原理介绍?

    MySQL中如何实现数据的多版本并发控制_MVCC原理介绍?MySQL中如何实现数据的多版本并发控制_MVCC原理介绍?MySQL中如何实现数据的多版本并发控制_MVCC原理介绍?MySQL中如何实现数据的多版本并发控制_MVCC原理介绍?

    mvcc 是 mysql innodb 引擎用于提升并发性能的多版本并发控制机制。1. 它通过保留数据多个版本,使读操作无需加锁、写操作仅在必要时加锁,减少锁竞争;2. 实现依赖隐藏字段(如 db_trx_id、db_roll_ptr)、undo log(保存旧版本数据)和 read view(决定…

    2026年9月7日 用户投稿
    100
  • mysql数据库查询缓存原理是什么

    mysql数据库查询缓存原理是什么mysql数据库查询缓存原理是什么mysql数据库查询缓存原理是什么mysql数据库查询缓存原理是什么

    mysql数据库查询缓存原理是:1、缓存SELECT操作的结果集和SQL语句,key为sql,value为查询结果集;2、如果新的SELECT语句到了,以这个sql为key去缓存中查询,如果匹配,就把缓存的结果集返回。 mysql数据库查询缓存原理是: 概述 查询缓存(Query Cache,简称Q…

    2026年9月7日 用户投稿
    300
  • mysql无密码怎么设置密码

    mysql无密码设置密码的方法:1、使用mysqladmin来完成【shell> mysqladmin -u root password “newpwd”】;2、利用mysql里面的SET PASSWORD命令来完成。 mysql无密码设置密码的方法: 方法一:最简单的…

    2026年9月7日
    000
  • CentOS系统备份怎么操作_CentOS系统备份与恢复方法

    CentOS系统备份是确保数据安全与业务连续性的关键措施,必须通过文件级(如tar、rsync)和块级(如dd、LVM快照)工具结合实现,核心策略包括定期全量与增量备份、3-2-1存储规则、自动化执行、定期恢复测试及异地加密存储,以应对硬件故障、人为错误等风险,保障系统可快速恢复。 CentOS系统…

    2026年9月7日
    000
  • mysql命令行导入数据报错怎么办

    mysql命令行导入数据报错怎么办mysql命令行导入数据报错怎么办mysql命令行导入数据报错怎么办mysql命令行导入数据报错怎么办

    mysql命令行导入数据报错的解决办法:1、在命令行输入【set global local_infile=1】运行,继续输入【show variables like ‘%local%’】运行;2、将字符编码转换为【UTF-8】。 mysql命令行导入数据报错的解决办法: 一、…

    2026年9月7日 用户投稿
    100
  • mysql大表查询慢怎么优化?

    mysql大表查询慢的优化方法:1、合理建立索引,通常查询利用到索引比不用索引更快;2、对关键字段建立水平分区,比如时间字段,若查询条件往往通过时间范围来进行查询,能提升不少性能;3、建立粗粒度数据表;4、利用缓存。 (推荐教程:mysql视频教程) mysql数据库中如何数据表太大,则查询会变慢,…

    2026年9月7日
    000
  • MySQL索引提高查询效率的原因何在

    MySQL索引提高查询效率的原因何在MySQL索引提高查询效率的原因何在MySQL索引提高查询效率的原因何在MySQL索引提高查询效率的原因何在

    mysql教程栏目介绍索引提高查询效率的原因。 背景 我相信大家在数据库优化的时候都会说到索引,我也不例外,大家也基本上能对数据结构的优化回答个一二三,以及页缓存之类的都能扯上几句,但是有一次阿里P9的一个面试问我:你能从计算机层面开始说一下一个索引数据加载的流程么?(就是想让我聊IO) 我当场就去…

    2026年9月7日 用户投稿
    000

发表回复

登录后才能评论
关注微信