本文主要向大家介绍了MySQL数据库之一次MySQL慢查询导致的故障 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

我们知道分析MySQL语句查询性能的方法除了使用EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。

一、 起因研发反应某台数据库僵死,后面的会话要么连接不上,要么要花费大量的时间返回结果,哪怕是一个简单的查询。

二、 处理首先去监控平台查看服务器以及数据库状态,发现这台数据库有大量的慢查询。继续看服务器监控,CPU 平均使用率较高,IO 读写平均值正常。登录到 MySQL,使用 SHOW PROCESSLIST 查看会话状态,总数居然有 600+,这是很不正常的。查看慢查询日志,发现出问题的 SQL 主要集中在几个,有 SUM、有 COUNT、有等值操作等等。这台 MySQL 服务器的 long_query_time 设置为 3秒,而一个简单的查询却要几十秒,这显然是有问题的。写脚本试着 kill 掉相关的会话,发现于事无补,仍然有大量的连接进来。此时使用 top 查看服务器状态,mysqld 进程占用内存和 CPU 居高不下。

接着使用 SHOW FULL PROCESSLIST 查看完整状态,在最上面居然发现几条 SQL。这些 SQL 操作使用子查询实现,TIME 列居然达到了 30000 秒,折算过来差不多 10 小时。EXPLAIN 这些语句,居然出现了 USING TEMPORY 和 USING FILESORT,可以看出这些语句是很糟糕的。于是跟开发确认,紧急把这些会话 kill 掉。稍等片刻,会话数立马降下来,只有 100+,top 查看 mysqld 进程,内存和 CPU 都呈现下降的趋势。接着分析开发说上午 9 时写了这些 SQL,发现有问题,注释掉了。新的代码虽然没有此类 SQL,但之前建立的连接并不会释放。解决问题和出现问题的时间差刚好可以和添加子查询的时间对应,就可以确认子查询是此次故障的罪魁祸首。

三、 总结通过这个故障,总结如下几点:MySQL 应该尽量避免使用子查询,即使使用,也要搞清楚大表和小表的关系;

出现这类问题的排查步骤:

第一,查看服务器监控和 MySQL 监控,分析服务器以及 MySQL 性能,找出异常;第二,如果是慢查询导致,查看慢查询日志,找出出现问题的 SQL,试着优化,或者把结果缓存;第三,分清主次,先解决大块问题,后解决细小问题。 把大块的异常解决,小问题就迎刃而解了。比如本文中的例子,把耗费时间长的会话 kill 掉后,后面的连接就正常了;第四,总结分析。高效的沟通会事半功倍;

DBA 需要定期给出 Top N SQL(类 Oracle 的说法),提供给开发,并协助优化;

查看监控时,不管是服务器监控还是 MySQL 监控,需要做对比,比如和昨天甚至前天的同一时间对比,这会更加快速地定位问题。

四、 技巧最后,附上一个快速kill 掉 MySQL 会话的方法:

首先使用如下语句分析出有问题的 SQL:

/usr/local/mysql/bin/mysql -uroot -p'XXX' \ -e "SHOW FULL PROCESSLIST;" | more

然后将 SHOW FULL PROCESSLIST 的结果保存到一个文件:

/usr/local/mysql/bin/mysql -uroot -p'XXX' \-e "SHOW FULL PROCESSLIST;" | \grep "XXX" | awk '{print $1}' > mysql_slow.txt

最后使用如下简单的 Shell 脚本 kill 掉相关会话:SELECT concat('kill ',id,';')FROM information_schema.processlistWHERE info like 'XXX';

当然也可以使用如下 SQL 拼接 kill 语句:SELECT concat('kill ',id,';')FROM information_schema.processlistWHERE info like 'XXX';

本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!

mysql语句查询慢造成mysql卡死_MySQL数据库之一次MySQL慢查询导致的故障相关推荐

  1. mysql 从库开启复制慢日志_Mysql数据库优化之开启慢查询日志

    Mysql版本:5.5.18 下面将介绍两种方式开启mysql开启慢查询的方法 1.    配置文件修改(重启mysql后不会失效,缺点是修改完配置文件后需要重启) 打开mysql配置文件(安装方式不 ...

  2. 利用mysql上传木马_通过Mysql语句生成后门木马的方法_MySQL

    通过Mysql 的语句生成后门木马的方法! SELECT * FROM `vbb_strikes` WHERE 1 union select 2,3,0x3C3F7068702073797374656 ...

  3. mysql上传木马_通过Mysql语句生成后门木马的方法_MySQL

    通过Mysql 的语句生成后门木马的方法! SELECT * FROM `vbb_strikes` WHERE 1 union select 2,3,0x3C3F7068702073797374656 ...

  4. mysql语句大全 新浪博客_MySQL语句入门

    MySQL数据库入门 1. MySQL数据库登录: 第一步:首先windows+R键,在弹出的页面内输入cmd,然后点确定进入控制台界面. 第二步:输入mysql -u root -p 回车 然后 - ...

  5. mysql改了排序规则不生效_Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题...

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...

  6. mysql自定义序号_MySQL数据库之在mysql中给查询的结果添加序号列

    本文主要向大家介绍了MySQL数据库之在mysql中给查询的结果添加序号列 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 一:第一种: select   (@i:=@i+1)  ...

  7. mysql锁表查询_Mysql数据库锁情况下开启备份导致数据库无法访问处理分享

    [背景简介] MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),因为其速度.可靠性和适应性而备受关注.大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择.mysql ...

  8. mysql客户端查询_MySQL数据库之利用mysql客户端查询UCSC数据库

    本文主要向大家介绍了MySQL数据库之利用mysql客户端查询UCSC数据库 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. UCSC Genome Browser是由Unive ...

  9. mysql怎么给数据加序号_MySQL数据库之在mysql中给查询的结果添加序号列

    本文主要向大家介绍了MySQL数据库之在mysql中给查询的结果添加序号列 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 一:第一种: select   (@i:=@i+1)  ...

最新文章

  1. 通过配置NFS使Ubuntu和海思3559A板子共享目录
  2. 10.30 linux和windows互传文件,用户配置文件和密码配置文件,用户组管理,用户管理...
  3. WINCE6.0+S3C2443下的activesync问题
  4. Git的commit之后的撤销reset
  5. 利用旧服务器制作存储资源池,想将存储系统整合,又想实现存储资源池化?
  6. svn 命令行_Ubuntu下Subversion(SVN)的快速安装与配置
  7. springBoot 注入@Slf4j,框架中的方法无法调用。。。
  8. [转]《帮我买个单》
  9. mysql cast和convert函数
  10. hdu 4911 “Inversion”——逆序对问题
  11. pandas 数据透视表
  12. python四分位数_四分位数计算以及使用pandas计算
  13. Windows下自动云备份思源笔记到Gitee
  14. docker安装ng+tomcat+es+kiba+sql
  15. C++ 实现mystring类型
  16. 快应用是什么软件?快应用有什么用?
  17. dialog使用(dialog使用方法)
  18. Given-When-Then表达方式应用
  19. php查询友情链接,友情链接查询
  20. 英语论文投稿与写作36问 [36 Questions on Publishing and Writing English Journal Articles]

热门文章

  1. Directx11基础教程一之Directx11框架
  2. Leetcode 1370. Increasing Decreasing String
  3. 香橙派orange pi c# iot .net 读取温湿传感器 芯片sht30 I2C 代码实例
  4. 软件设计师-随笔笔记
  5. ICCV2019 ——Clustered Object Detection in Aerial Images(目标检测)
  6. 3.2. Module
  7. 青蛙有那么蠢吗?(转载)
  8. 华硕h110m_华硕H110M-K和华硕H110M-D有什么区别?
  9. 细说Python设计模式之模板方法模式(封装算法)
  10. 如何修改注册表,在Balabolka文字转语音软件(TTS软件)的SAPI 5下拉列表中,添加Yaoyao和Kangkang语音