近期发现管理的一些MySQL实例偶发会出现连接数飙高,响应时间增长,负载上升等问题,但是业务又没有任何的波动,经过一定的排查发现是query cache lock导致。

问题表现:

419 State: Waiting for query cache lock

4 State: statistics

2 State: storing result in query cache

2 State: Sending data

1 State: Waiting for master to send event

关闭query cache 后:

1067   State:

1   State: Waiting for master to send event

1   State: Slave has read all relay log; waiting for the slave I/O thread to update it

关闭的效果非常明显,于是研究了一下query cache lock的问题。

首先,如果开启query cache,mysql再执行一个query的时候会先锁住query cache,然后判断是否再query cache中存在,如果存在直接返回结果,如果不存在,则再进行引擎查询等操作

mysql> show profile for query 4;

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

| Status | Duration |

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

| starting | 0.000015 |

| Waiting for query cache lock | 0.000003 |

| checking query cache for query | 0.000045 |

| checking permissions | 0.000006 |

| Opening tables | 0.000027 |

| System lock | 0.000007 |

| Waiting for query cache lock | 0.000032 |

| init | 0.000018 |

| optimizing | 0.000008 |

| statistics | 0.033109 |

| preparing | 0.000019 |

| executing | 0.000002 |

| Sending data | 4.575480 |

| Waiting for query cache lock | 0.000005 |

| Sending data | 5.527728 |

| Waiting for query cache lock | 0.000005 |

| Sending data | 5.743041 |

| Waiting for query cache lock | 0.000004 |

| Sending data | 6.191706 |

| end | 0.000007 |

| query end | 0.000005 |

| closing tables | 0.000028 |

| freeing items | 0.000008 |

| Waiting for query cache lock | 0.000002 |

| freeing items | 0.000182 |

| Waiting for query cache lock | 0.000002 |

| freeing items | 0.000002 |

| storing result in query cache | 0.000004 |

| logging slow query | 0.000001 |

| logging slow query | 0.000002 |

| cleaning up | 0.000003 |

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

其次,我们知道,所有insert、update和delete操作都会清空query cahce中被影响表的缓存,从而重新开始种cache。

The query cache always contains current and reliable data. Any insert, update, delete, or other modification to a table causes any relevant entries in the query cache to be flushed.

那么问题就来了,当我们的数据库不是那么频繁的更新的时候,query cache是个好东西,可以在本地形成一个cache,提高RT响应时间,但是如果反过来,如果写入非常频繁,并集中在某机张表上的时候。

那么query cache lock的锁机制会造成很频繁的锁冲突,对于这一张表的写和读会互相等待query cache lock解锁,导致select的查询效率下降。

相关阅读:

mysql cache lock_MySQL:query cache lock相关推荐

  1. mysql havequerycache_如何开启MySQL的中的Query Cache缓存

    MySQL Query Cache是mysql中的一个功能,主要是用来缓存和查询相关数据,本文文详细介绍如何开启MySQL中的Query Cache,以及Query Cache中的一些参数. MySQ ...

  2. gmap mysql cachet,MySQL的缓存(Query Cache)

    1.MySQL Query Cache query cache是MySQL数据库用于缓存select语句以及语句的结果集.该缓存在技术细节上类似键值对存储,将select语句和语句的查询结果集做了一个 ...

  3. mysql 禁用查询缓存 query cache

    os:centos 6.8 mysql: 5.5.49 MySQL Query Cache 会缓存select 查询,但是在调优sql查询及测试数据库的性能时需要禁用该功能. 查看变量.状态 mysq ...

  4. mysql中lock_mysql中的锁lock

    锁的分类 1. 表级锁(MyISAM):开销小,加锁快 不会出现死锁 锁定力度大,发生锁冲突概率最高,并发度低 表共享读锁.表独占写锁 MyISAM在执行select语句时,会自动给相关表加读锁: 执 ...

  5. mysql cache lock_mysql服务器上有sql状态status显示 Waiting for query cache lock?

    [导读] 与朋友或同事谈到mysql查询缓存功能的时候,个人喜欢把Query Cache比作荔枝, 是非常营养的东西,但是一次性吃太多了,就容易导致上火而流鼻血,虽然不是特别恰当的比喻,但是有很多相似 ...

  6. mysql query cache 命中率_MySQL缓存命中率概述及如何提高缓存命中率

    MySQL缓存命中率概述 工作原理: 查询缓存的工作原理,基本上可以概括为: 缓存SELECT操作或预处理查询(注释:5.1.17开始支持)的结果集和SQL语句: 新的SELECT语句或预处理查询语句 ...

  7. mysql query cache优化

    query cache原理 当mysql接收到一条select类型的query时,mysql会对这条query进行hash计算而得到一个hash值,然后通过该hash值到query cache中去匹配 ...

  8. 为什么要关闭 MySQL Query Cache?

    备注:插图来自淘宝苏普的博客并保留水印,如果觉得不当还请及时告知 :) 写在前面:MySQL的query cache大部分情况下其实只是鸡肋而已,建议全面禁用.当然了,或许在你的场景下还是挺好的,还能 ...

  9. mysql query cache

    1.概述: MySQL Query Cache 缓存客户端提交给MySQL的SELECT(注意只是select)语句以及该语句的结果集. 注意:query_cache是mysql server端的查询 ...

最新文章

  1. 用最少的机器支撑万亿级访问,微博6年Redis优化历程
  2. UI组件之AdapterView及其子类(三)Spinner控件详解
  3. win8.1安装veket的方法
  4. PJzhang:英国通信总部GCHQ开源产品-网络瑞士军刀CyberChef
  5. python输入多个坐标点_判断多个坐标是否在同一条直线上|Python练习系列[13]
  6. Wpf 数据绑定简介、实例1
  7. Lec 16 Projection matrices and least squares
  8. 数据结构和算法详解(三)——递归、排序、散列表
  9. 150330之软件测试
  10. c# 导出Excel
  11. Java多线程并发编程实践总结
  12. html php即时通讯_PHP在线客服即时通讯源码
  13. Tomcat 9安装配置教程
  14. Redis的持久化方式
  15. html如何将搜索图标放入搜索框中
  16. 后端返回文件流PDF文件前端如何实现下载/在线打开
  17. 行列视(RCV)生产数据应用系统产品简介
  18. python设置表格格式_python openpyxl表格样式设置
  19. android 强制退出当前应用程序,android 强制退出应用
  20. ARM APCS 学习笔记

热门文章

  1. C语言标准库中常见字符串处理函数
  2. Whitted光线追踪实现
  3. linux程序只监听了ipv6端口,c-在Linux上侦听IPv6多播
  4. python十大实例_Python练习实例100例(从简入难)96-100
  5. python locust_python locust--性能测试框架从零开始(三)
  6. 关于Scalability的一些思考与疑问
  7. devops之路rancher安装
  8. jquery动态插入行,不用拼写html,简洁版
  9. mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】...
  10. 笔记05 局部类型