定位问题

刚开始得到是系统慢的反馈,没有将问题点定位到数据库上,查了半天服务是否正常(因为之前有一次Dubbo内存泄漏)。

在将应用服务日志查看了一遍后,没有发现任何异常,只是打了几个警告的日志。

于是又查看了业务运行时的日志,看到日志都提示了一个 Lock wait timeout exceeded; try restarting transaction 的异常。

这时还是没有将重心放到数据库上,认为是代码的原因,导致事务一直没有提交。

重新将代码审阅了一遍,觉得应该不是代码逻辑的问题,而这个时候, Lock wait timeout exceeded; try restarting transaction 这个异常的日志越来越多。

认为是数据库层面出了问题,开始排查数据库。

寻找原因

由于我们的数据库不是用的 云RDS版本,是在一台8核32G的AWS上的安装版本。

使用 top 命令,查看到 Mysql 占用的 CPU 使用率高达 90% 左右。

心里一慌,感觉不妙,这样子高负载的CPU使用率,搞不好服务器都要宕掉。

于是拿出了仅有的一点Mysql基本知识,基本上这次只使用到了下面几个语句:

查看当前Mysql所有的进程

show processlist;

查看Mysql的最大缓存

show global variables like "global max_allowed_packet"

查看当前正在进行的事务

select * from information_schema.INNODB_TRX

查看当前Mysql的连接数

show status like 'thread%'

解决

按照上面的几个语句,一步一步跟踪定位下来。

show processlist; 下来,我们就可以查看出当前所有的进程,并且得到最耗时的进程。

在当前数据库中,看到处于 Sleep 状态的SQL非常多,而这也是占用CPU过高的重大原因,休眠线程太多,于是配置了一个 wait_time_out 为 600 秒的一个解决方案。

为什么配置600秒,因为我们应用超时时间配置的最大时间就是 600秒,10分钟,这里的配置需要根据业务来具体配置。

select * from information_schema.INNODB_TRX

执行这个语句,看到Mysql中大部分处于 Lock 的SQL是一条 update 的SQL,而且还有一个单条件的SQL,查询居然耗时4分钟,很是惊讶。

于是查看了这张表。

刚一打开结构,差点没忍住口吐芬芳,居然一个索引都没有,数据量超过300W,没有索引查询基本上都要4分钟往上走。

于是准备加上索引,在一阵漫长的等待中,索引终于加上去了。

show status like 'thread%'

索引加上去了之后,查看了一下当前Mysql的连接数,似乎没有之前那么高了,估计是挤压的太多。

然后又查看了下服务器的CPU占用率,这次好了一点,从1%到80%来回跳动,没有出现90&那么高的频率。

总结

Mysql作为使用频率非常高的数据库,对于它的SQL调优真的是一门技术活,而且项目中的一些SQL看的也是想吐,这种调优起来真的难上加难。

其实 information_schema 这个数据库,里面的Mysql日志看起来比业务日志顺眼的很多。

程序调用mysql突然变慢_排查Mysql突然变慢相关推荐

  1. mysql主从数据库含义_(转)Mysql数据库主从心得整理

    管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...

  2. mysql 中有什么命令_常用mysql命令大全

    常用的MySQL命令大全 连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命 ...

  3. mysql 5.6参数_初识 MySQL 5.6 新功能、参数

    摘要: MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不定时更新). 一:性能.功能上的提升. ① 在线DDL即 onli ...

  4. mysql 查询存储过程 速度_查询mysql过程

    MySql 使用explain分析查询 今天写了个慢到哭的查询,想用explain分析下执行计划,后来发现explain也是有局限性的: EXPLAIN不会告诉你关于触发器.存储过程的信息或用户自定义 ...

  5. mysql教学磁力链_使用MySQL存储以太坊事件

    在本文中,我将演示一种缓存以太坊事件的简单方法.我只想说,通常我们将事务用于链下操作,例如跟踪令牌的传输或检索特定事务的筛选列表,就像一个SQL查询一样. 假设我们想要创建一个跟踪令牌传输的网站,Et ...

  6. mysql怎么加快搜索_优化mysql数据库 提高检索速度

    在优化查询中,数据库应用(如MySQL)即意味着对工具的操作与使用.使用索引.使用EXPLAIN分析查询以及调整MySQL的内部配置可达到优化查询的目的. 任何一位数据库程序员都会有这样的体会:高通信 ...

  7. mysql数据库建仓范式_存mysql个数

    MySQL学习笔记之数据类型详解 注:以下内容针对MySQL5.0及以上版本 MySQL的数据类型非常多,选择正确的数据类型对于获得高性能至关重要,本文是我结合网上看到的一些blog加上<高性能 ...

  8. mysql数据库断开连接_解决mysql服务器在无操作超时主动断开连接的情况

    我们在使用mysql服务的时候,正常情况下,mysql的设置的timeout是8个小时(28800秒),也就是说,如果一个连接8个小时都没有操作,那么mysql会主动的断开连接,当这个连接再次尝试查询 ...

  9. mysql pool返回值_【Mysql】你知道一条查询语句是如何执行的吗?

    [Mysql]你知道一条查询语句是如何执行的吗?​mp.weixin.qq.com 前言 在默认大家学习了Mysql结构的基础上,我们来深入的解析一下sql语句在mysql中是如何流转和实现的.本文会 ...

最新文章

  1. flink 自定义 窗口_Flink入门实战 (下)
  2. HTML5学习笔记简明版(10):过时的元素和属性
  3. Mysql视图与数据备份
  4. Java的应用领域有哪些呢?分享这几个
  5. 闪烁点击效果css,CSS3自定义闪烁动画效果实例
  6. USACO2.3【dfs,dp,背包】
  7. 我不够格,但我还是希望事情到此为止,继续工作罢
  8. python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法
  9. 之前关于字符串拼接的错误修正
  10. 2016年北京大学信息学奥赛训练营上机考核第四场【pkusc真题模拟总结】
  11. openlayers+vue水流图
  12. 如何写一份好的软件开发的需求分析
  13. 小程序开发小游戏注意事项
  14. 对音频压缩概念的一些误解--记一次与音视频压缩专家的对话
  15. Android Tips 8
  16. 记一次跟突破360主机卫士上传
  17. 可缩放矢量图形svg
  18. Snapde电子表格支持的文件格式
  19. 微信小程序农历阳历日期选择器选中日期同时获取对应农/阳历日期 这个demo问题的修改
  20. flutter拨打电话url_launcher

热门文章

  1. 游戏服务器出现问题怎么维护权益,游戏服务器出问题怎么解决
  2. c php aes加密解密,php的AES加密解密
  3. python appium自动化测试框架unittest_Appium基于Python unittest自动化测试 自动化测试框架 -- PO并生成html测试报告...
  4. Android studio中git密码记住的问题
  5. php 转义取消,php如何取消转义
  6. 在浏览器中进行深度学习:TensorFlow.js (十二)异常检测算法
  7. 企业分布式微服务云SpringCloud SpringBoot mybatis (十)Spring Boot多数据源配置与使用Spring-data-jpa支持...
  8. 开源NAS系统使用总结
  9. TODO:Laravel增加验证码
  10. Linux系统网卡配置方法