Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理。

一、Mysql查询缓存碎片和缓存命中率。

mysql> SHOW STATUS LIKE 'qcache%';

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

| Variable_name | Value |

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

| Qcache_free_blocks | 5 |

| Qcache_free_memory | 134176648 |

| Qcache_hits | 110 |

| Qcache_inserts | 245 |

| Qcache_lowmem_prunes | 0 |

| Qcache_not_cached | 7119 |

| Qcache_queries_in_cache | 9 |

| Qcache_total_blocks | 31 |

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

8 rows in set (0.01 sec)

MySQL 查询缓存变量

变量名

说明

Qcache_free_blocks

缓存中相邻内存块的个数。数目大说明可能有碎片。FLUSH QUERY CACHE会对缓存中的碎片进行整理,从而得到一个空闲块。

Qcache_free_memory

缓存中的空闲内存。

Qcache_hits

每次查询在缓存中命中时就增大。

Qcache_inserts

每次插入一个查询时就增大。命中次数除以插入次数就是不中比率;用 1减去这个值就是命中率。在上面这个例子中,大约有87%的查询都在缓存中命中。

Qcache_lowmem_prunes

缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的 free_blocks和free_memory可以告诉您属于哪种情况)。

Qcache_not_cached

不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT语句。

Qcache_queries_in_cache

当前缓存的查询(和响应)的数量。

Qcache_total_blocks

缓存中块的数量。

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_min_res_unit    查询缓存分配的最小块的大小(字节)

query_alloc_block_size    为查询分析和执行过程中创建的对象分配的内存块大小

Qcache_free_blocks    代表内存自由块的多少,反映了内存碎片的情况

==========================

1)当查询进行的时候,Mysql把查询结果保存在qurey cache中,但如果要保存的结果比较大,超过query_cache_min_res_unit的值 ,这时候mysql将一边检索结果,一边进行保存结果,所以,有时候并不是把所有结果全部得到后再进行一次性保存,而是每次分配一块query_cache_min_res_unit大小的内存空间保存结果集,使用完后,接着再分配一个这样的块,如果还不不够,接着再分配一个块,依此类推,也就是说,有可能在一次查询中,mysql要 进行多次内存分配的操作。

2)内存碎片的产生。当一块分配的内存没有完全使用时,MySQL会把这块内存Trim掉,把没有使用的那部分归还以重 复利用。比如,第一次分配4KB,只用了3KB,剩1KB,第二次连续操作,分配4KB,用了2KB,剩2KB,这两次连续操作共剩下的1KB+2KB=3KB,不足以做个一个内存单元分配, 这时候,内存碎片便产生了。

3)使用flush query cache,可以消除碎片

4)如果Qcache_free_blocks值过大,可能是query_cache_min_res_unit值过大,应该调小些

5)query_cache_min_res_unit的估计值:(query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache

检查查询缓存使用情况

检查是否从查询缓存中受益的最简单的办法就是检查缓存命中率

当服务器收到SELECT语句的时候,Qcache_hits和Com_select这两个变量会根据查询缓存

的情况进行递增

查询缓存命中率的计算公式是:Qcache_hits/(Qcache_hits + Com_select)。

mysql> show status like '%Com_select%';

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

| Variable_name | Value |

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

| Com_select    | 1     |

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

1 row in set (0.00 sec)

此时的查询缓存命中率:3/(3+1)=75%;由于个人的测试数据库,查询较少,更行更少,命中率颇高。

http://blog.chinaunix.net/uid-25266990-id-3426963.html

mysql缓存 碎片_Mysql查询缓存碎片、缓存命中率及Nagios监控相关推荐

  1. mysql是否有缓存区_Mysql查询高速缓存区

    为了提高查询速度,Mysql会维护一个内存区域(官方文档指出,大小至少41984B)对查询结果进行缓存,当查询时发现缓存区里有数据则直接返回结果而不用去执行sql语句. 查询命中的条件 每个缓存查询至 ...

  2. mysql 查看某个表缓存情况_MySQL 查询缓存 QUERY_CACHE

    保存查询返回的完整结果.当查询命中该缓存,MySQL会立即返回结果,跳过解析.优化和执行阶段. 官方在特定环境测试结果(官方文档中有详细说明): 1.如果对某表进行简单查询,但每次查询条件都不一样时, ...

  3. mysql 缓存优缺点_MySQL查询缓存的优缺点

    任职DBA一年多了,更正下博客. 其实MySQL8.0已经取消了查询缓存.如果是小型项目,又不想用Reids或者MC等缓存,查询结果相对固定,可以在MySQL5.7以下版本设置缓存. ######## ...

  4. mysql 回收空间_MySQL表的碎片整理和空间回收小结

    MySQL表碎片化(Table Fragmentation)的原因 关于MySQL中表碎片化(Table Fragmentation)产生的原因,简单总结一下,MySQL Engine不同,碎片化的原 ...

  5. mysql 性能查看_MySQL查询性能问题排查

    Mysql数据库的性能问题排查是十分复杂的,具体方法视场景而定,这里只做大致思路分析. 1. 整体考虑导致查询性能低下的各种因素 导致SQL查询变慢的原因是多元化的,在遇到问题时首先要有一个全方位的思 ...

  6. 在mysql中通配符_mysql查询中通配符的使用

    mysql查询中通配符的使用 在mysql查询中经常会使用通配符,并且mysql的通配符和pgsql的存在区别(稍候再讨论),而且mysql中还可以使用正则表达式. SQL模式匹配: "_& ...

  7. mysql 严格区分大小写_Mysql查询英文如何严格区分大小写?

    1. 前提: 在Mysql数据库中进行查询时,希望英文严格区分大小写.默认情况下是不区分大小写的. 2. 演示如下: 在数据库表emp中,job字段中存储的值有'Engineer',现在的情况是,下面 ...

  8. mysql 查询缓存设置_MySQL查询缓存设置 提高MySQL查询性能

    从 MySQL4开始,出现了QueryCache查询缓存,如果使用了QueryCache,当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提 ...

  9. mysql响一下_MySQL开发人员对缓存下了一道处决令,枪声已响!

    多核机器变得很忙碌时,可扩展性就会很糟糕,于是MySQL数据库的开发人员决定要另谋出路. MySQL Server的一群开发人员已认定,MySQL的查询缓存(Query Cache)这项功能现已成了瓶 ...

最新文章

  1. Request: Headless HTML rendering engine
  2. LDD3源码分析之阻塞型I/O
  3. 【C 语言】字符串拷贝 ( 字符串拷贝业务逻辑代码 | 分离 主函数 与 字符串拷贝 业务模型 )
  4. Ansible-Playbook-template算数运算以及流程控制
  5. SAP Fiori 页面的周期性动态刷新功能的实现步骤
  6. 汇编语言学习——第四章 第一个汇编程序
  7. CSipIm断网重连崩溃原因分析
  8. java遍历hashmapk v_Java HashMap 遍历方式探讨
  9. 装饰模式 -- 大话设计模式
  10. React-leaflet在ant-design pro中的基本使用
  11. 本文讲述chmod +x或chmod 755或chmod -r几个流行命令的含义与使用方法
  12. 泛微云桥e-Bridge 授权破解方法
  13. C和C++不安全?Android 支持 Rust 开发操作系统
  14. 天津大学仁爱学院计算机科学与技术学费,天津大学仁爱学院计算机科学与技术专业2016年在山西理科高考录取最低分数线...
  15. Django如何自定义DTL过滤器?
  16. 张赐荣 | 详解SAPI5语音转换扩展XMLTTS标记
  17. [渝粤教育] 华中科技大学 模拟电子技术基础 参考 资料
  18. Linux启动分析之Initramfs
  19. 中国教育资助网“益行天下”大型公益学子资助活动启动
  20. 洪志鹏专栏> 我爱比尔盖兹

热门文章

  1. 调试中的一些Python错误
  2. 前端JS通过Ajax下载后端返回的Excel文档
  3. 2013 2016 年期末考试
  4. Verdaccio介绍及安装 -- nodejs私有npm proxy registry代理
  5. reactjs css modules解决组件间样式覆盖问题
  6. npm install -g -S -D的区别及应用场景
  7. helm3 push/pull安装使用细节及添加国内仓库
  8. loadrunner脚本设计:事务函数的使用
  9. MySQL中varchar所占字节大小是多少
  10. Linux 格式化输出当前系统时间