mysql数据库性能优化 - 查询缓存

查询缓存

      缓存机制简单的说就是缓存sql文本和查询结果,如果运行相同的sql,服务器直接从缓存中取到结果,而不需要去解析和执行sql,如果表更改了,那么使用这个表的所有缓存查询将不再有效,查询缓存值的相关条目被清空。更改指的是表中任何数据或是结构的改变,包括insert、update、delete、truncate、alter table、drop table或drop database等。这对频繁更新的表,查询缓存是不适合的,而对一些不常改变数据且大量相同的sql查询的表,查询缓存会节约很大的性能。

查询必须是完全相同的才能够被认为是相同的。另外,同样的查询字符串由于其他原因可能认为是不同的,使用不同的数据库、不同的协议版本或者不同的默认字符集的查询被认为是不同的查询并且分别进行缓存。

 1、query cache开启方法

编辑mysql的my.cnf,添加如下内容,然后重启mysql:

  • query_cache_size = 268435456   --设置query cache所使用的内存大小,默认为0,大小必须是1024的整数部
  • query_cache_type = 1   --给所有的查询做cache
  • query_cache_limit = 1048576  --允许cache的单条query结果集的最大容量,默认是1MB,超过此参数设置的query结果集将不会被cache

 2、query cache运行状态分析

show status like ‘Qcache%‘;

  • Qcache_free_blocks:数目大说明可能有碎片
  • Qcache_free_memory:缓存中的空闲内存
  • Qcache_hits:每次查询在缓存中命中时就增大
  • Qcache_insert:每次插入一个查询时就增大
  • Qcache_lowmem_prunes:缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看,如果不断增长,标示可能碎片非常严重,或者内存很少。(结合Qcache_free_blocks和Qcache_free_memory分析属于哪种情况)
  • Qcache_total_blocks:缓存中块的总数量
  • Qcache_not_cached:不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT 语句或者用了now()之类的函数。

 3、query cache设置状态分析

       show  variables like ‘%query_cache%‘;

  • query_cache_limit:允许cache的单条query结果集的最大容量,默认是1MB,超过此参数设置的query结果集将不会被cache
  • query_cache_size:设置query cache所使用的内存大小,默认为0,大小必须是1024的整数倍
  • query_cache_type:控制query cache功能的开关,可设置为:0(OFF,关闭query cache功能,如何情况下都不会使用query cache)、1(ON,开启query cache功能,只要select语句中不使用sql_no_cache提示,都会使用query cache)、2(DEMAND,开启query cache功能,但是只有当select语句中使用了sql_cache提示后,才使用query cache)
  • query_cache_min_res_unit:缓存块的最小大小。是一柄”双刃剑”,默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费。

4、几个率

query cache命中率=Qcache_hits / (Qcache_hits+Qcache_inserts)

查询缓存碎片率=Qcache_free_blocks / Qcache_total_blocks * 100%

--如果查询缓存碎片率超过20%,可以使用flush query cache; 整理缓存碎片

查询缓存利用率=(query_cache_size - query_free_memory)/ query_cache_size * 100%

--查询缓存利用率在25%以下的话说明query_cache_size设置过大,可适当减小;查询缓存利用率在80%以上而且query_lowmem_prunes > 50的话,说明query_cache_size可能有点小,要不就是碎片太多。

时间: 2024-11-03 22:38:41

mysql数据库性能优化 - 查询缓存的相关文章

mysql数据库性能优化(包括SQL,表结构,索引,缓存)

优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段.降低 CPU 计算除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了.order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算).当我们的 IO 优化做到一定阶段之后

MySQL数据库性能优化专题

摘录: 书:<MySQL性能调优与架构设计> 一个系列: (按顺序排一下) MySQL 数据库性能优化之缓存参数优化 http://isky000.com/database/mysql-perfornamce-tuning-cache-parameter MySQL 数据库性能优化之表结构优化 http://isky000.com/database/mysql-perfornamce-tuning-schema MySQL 数据库性能优化之索引优化 http://isky000.com/dat

架构设计:系统存储(9)——MySQL数据库性能优化(5)

=================================== (接上文<架构设计:系统存储(9)--MySQL数据库性能优化(5)>) 4-3-3-3.避免死锁的建议 上一篇文章我们主要介绍了MySQL数据库中锁的基本原理.工作过程和产生死锁的原因.通过上一篇文章的介绍,可以确定我们需要业务系统中尽可能避免死锁的出现.这里为各位读者介绍一些在InnoDB引擎使用过程中减少死锁的建议. 正确使用读操作语句 经过之前文章介绍,我们知道一般的快照读是不会给数据表任何锁的.那么这些快照读操作

MySQL数据库性能优化及自动化运维实践教程!DBA日常工作

MySQL数据库性能优化及自动化运维实践教程!本文作者将站在更加全面的角度分享他在这一年多 DBA 工作中的经验,希望可以给大家带来启发和帮助. DBA 的日常工作 我觉得 DBA 真的很忙,我们来看看 DBA 的具体工作:备份和恢复.监控状态.集群搭建与扩容.数据迁移和高可用. 上面这些是我们 DBA 的功能,了解这些功能以后要对体系结构有更加深入的了解,你不知道怎么处理这些故障和投诉的事情. 所以我们要去了解缓存/线程.SQL 优化.存储引擎.SQL 审计以及锁与实务:体系结构更深一点,就去

架构设计:系统存储(8)——MySQL数据库性能优化(4)

================================ (接上文<架构设计:系统存储(7)--MySQL数据库性能优化(3)>) 4-3.InnoDB中的锁 虽然锁机制是InnoDB引擎中为了保证事务性而自然存在的,在索引.表结构.配置参数一定的前提下,InnoDB引擎加锁过程是一样的,所以理论上来说也就不存在"锁机制能够提升性能"这样的说法.但如果技术人员不理解InnoDB中的锁机制或者混乱.错误的索引定义和同样混乱的SQL写操作语句共同作用,那么导致死锁出现的

MySQL 数据库性能优化之索引优化

这是 MySQL数据库性能优化专题 系列的第三篇文章:MySQL 数据库性能优化之索引优化 索引为什么能提高数据访问性能? 很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解. 我们让一位不太懂计算机的朋友去图书馆确认一本叫做<MySQL性能调优与架构设计>的书是否在藏,这样对他说:"请帮我借一本计算机类的数据库书籍,是属于 MySQL 数据库范畴的,叫做<MySQL性能调优与架构设计>".朋友会根据所属类别,前往

MySQL数据库性能优化之一

MySQL数据库性能优化需要考虑的几个方面: 1.sql语句及索引优化 2.数据库结构优化 3.系统配置优化 4.硬件优化

Mysql数据库性能优化(一)

参考 http://www.jb51.net/article/82254.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库. mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面

Mysql数据库性能优化大总结

目录:[TOC] 影响数据库服务器性能的因素 超高的QPS(每秒钟处理的查询量)和TPS导致SQL处理效率下降. 大量的并发导致的数据库连接数被占满和超高的CPU占用率导致资源耗尽服务器宕机. 磁盘IO性能瓶颈导致数据传输效率下降,计划任务导致磁盘IO下降. 网卡IO性能瓶颈,要减少从服务器数量,缓存要分级,避免使用 select * 这样的查询. 大表导致的问题: 不同数据库引擎对于大表的概念是不一样的. InnoDB存储引擎没有明确的大表概念. 实际使用中发现当一个数据表中的数据超过千万行的