程序调用mysql突然变慢_排查Mysql突然变慢
定位问题
刚开始得到是系统慢的反馈,没有将问题点定位到数据库上,查了半天服务是否正常(因为之前有一次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突然变慢相关推荐
- mysql主从数据库含义_(转)Mysql数据库主从心得整理
管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...
- mysql 中有什么命令_常用mysql命令大全
常用的MySQL命令大全 连接MySQL格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命 ...
- mysql 5.6参数_初识 MySQL 5.6 新功能、参数
摘要: MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不定时更新). 一:性能.功能上的提升. ① 在线DDL即 onli ...
- mysql 查询存储过程 速度_查询mysql过程
MySql 使用explain分析查询 今天写了个慢到哭的查询,想用explain分析下执行计划,后来发现explain也是有局限性的: EXPLAIN不会告诉你关于触发器.存储过程的信息或用户自定义 ...
- mysql教学磁力链_使用MySQL存储以太坊事件
在本文中,我将演示一种缓存以太坊事件的简单方法.我只想说,通常我们将事务用于链下操作,例如跟踪令牌的传输或检索特定事务的筛选列表,就像一个SQL查询一样. 假设我们想要创建一个跟踪令牌传输的网站,Et ...
- mysql怎么加快搜索_优化mysql数据库 提高检索速度
在优化查询中,数据库应用(如MySQL)即意味着对工具的操作与使用.使用索引.使用EXPLAIN分析查询以及调整MySQL的内部配置可达到优化查询的目的. 任何一位数据库程序员都会有这样的体会:高通信 ...
- mysql数据库建仓范式_存mysql个数
MySQL学习笔记之数据类型详解 注:以下内容针对MySQL5.0及以上版本 MySQL的数据类型非常多,选择正确的数据类型对于获得高性能至关重要,本文是我结合网上看到的一些blog加上<高性能 ...
- mysql数据库断开连接_解决mysql服务器在无操作超时主动断开连接的情况
我们在使用mysql服务的时候,正常情况下,mysql的设置的timeout是8个小时(28800秒),也就是说,如果一个连接8个小时都没有操作,那么mysql会主动的断开连接,当这个连接再次尝试查询 ...
- mysql pool返回值_【Mysql】你知道一条查询语句是如何执行的吗?
[Mysql]你知道一条查询语句是如何执行的吗?mp.weixin.qq.com 前言 在默认大家学习了Mysql结构的基础上,我们来深入的解析一下sql语句在mysql中是如何流转和实现的.本文会 ...
最新文章
- flink 自定义 窗口_Flink入门实战 (下)
- HTML5学习笔记简明版(10):过时的元素和属性
- Mysql视图与数据备份
- Java的应用领域有哪些呢?分享这几个
- 闪烁点击效果css,CSS3自定义闪烁动画效果实例
- USACO2.3【dfs,dp,背包】
- 我不够格,但我还是希望事情到此为止,继续工作罢
- python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法
- 之前关于字符串拼接的错误修正
- 2016年北京大学信息学奥赛训练营上机考核第四场【pkusc真题模拟总结】
- openlayers+vue水流图
- 如何写一份好的软件开发的需求分析
- 小程序开发小游戏注意事项
- 对音频压缩概念的一些误解--记一次与音视频压缩专家的对话
- Android Tips 8
- 记一次跟突破360主机卫士上传
- 可缩放矢量图形svg
- Snapde电子表格支持的文件格式
- 微信小程序农历阳历日期选择器选中日期同时获取对应农/阳历日期 这个demo问题的修改
- flutter拨打电话url_launcher
热门文章
- 游戏服务器出现问题怎么维护权益,游戏服务器出问题怎么解决
- c php aes加密解密,php的AES加密解密
- python appium自动化测试框架unittest_Appium基于Python unittest自动化测试 自动化测试框架 -- PO并生成html测试报告...
- Android studio中git密码记住的问题
- php 转义取消,php如何取消转义
- 在浏览器中进行深度学习:TensorFlow.js (十二)异常检测算法
- 企业分布式微服务云SpringCloud SpringBoot mybatis (十)Spring Boot多数据源配置与使用Spring-data-jpa支持...
- 开源NAS系统使用总结
- TODO:Laravel增加验证码
- Linux系统网卡配置方法