排查Mysql突然变慢的一次过程[通俗易懂]

排查Mysql突然变慢的一次过程[通俗易懂]排查Mysql突然变慢的一次过程 本文源地址:排查Mysql突然变慢的一次过程 上周客户说系统突然变得很慢,而且时不时的蹦出一个 404 和 500,弄得真的是很没面子,而恰巧出问题的时候正在深圳出…

排查Mysql突然变慢的一次过程

排查Mysql突然变慢的一次过程

mysql.jpg

本文源地址:排查Mysql突然变慢的一次过程

上周客户说系统突然变得很慢,而且时不时的蹦出一个 404500,弄得真的是很没面子,而恰巧出问题的时候正在深圳出差,所以一直没有时间 看问题,一直到今天,才算是把问题原因找到。


定位问题

刚开始得到是系统慢的反馈,没有将问题点定位到数据库上,查了半天服务是否正常(因为之前有一次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日志看起来比业务日志顺眼的很多。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6811.html

(0)
上一篇 2023-04-01
下一篇 2023-04-01

相关推荐

  • MySQL第四天「建议收藏」

    MySQL第四天「建议收藏」2022-09-06 1、为某个字段设置别名(as关键字) 以“students”为例: students表的字段有:id,name,age,gender,is_del select name as

    2023-06-04
    140
  • Python NumPy数据类型转换:更改数据类型以满足特定需求

    Python NumPy数据类型转换:更改数据类型以满足特定需求Python NumPy是一个开源库,用于在Python中的数学计算与科学计算。作为一种数据处理和分析的工具,NumPy有俩个主要的对象:数组和矩阵。然而,像Python,NumPy也支持不同的数据类型,这些类型用于对数组的元素进行编码。这就是Python NumPy数据类型转换:更改数据类型以满足特定需求的重要性所在。

    2023-12-04
    124
  • 快速开发可视化数据分析应用的Python脚本

    快速开发可视化数据分析应用的Python脚本在当今的大数据时代,数据分析越来越重要。Python作为一种流行的编程语言,非常适合用于数据科学和分析。Python拥有强大的科学计算库、易于使用的接口和令人印象深刻的可视化工具,因此成为数据科学家和研究人员的首选工具。在今天的文章中,我们将探讨如何使用Python脚本快速开发可视化数据分析应用。

    2024-03-24
    77
  • SQL Server内置的HTAP技术「终于解决」

    SQL Server内置的HTAP技术「终于解决」SQL Server内置的HTAP技术 目录 背景 SQL Server在OLAP上的发展 SQL Server的初代HTAP SQL Server逐渐增强的HTAP SQL Server列存总结 H

    2023-05-09
    137
  • 查询代码在哪个视图、存储过程、函数、触发中使用过「建议收藏」

    查询代码在哪个视图、存储过程、函数、触发中使用过「建议收藏」工作中偶尔会出现:想用A数据表替换B数据表,然后把B数据表删除。但是,又不知道B数据表在哪个视图、存储过程、函数、触发器中使用过? 经过一番度娘,看到实现方法也不难,主要涉及两个系统表:sysobje

    2022-12-16
    134
  • Python Class用于面向对象编程

    Python Class用于面向对象编程Python是一种简单易学的高级编程语言,常用于数据分析、机器学习、人工智能等领域。Python是一种面向对象的编程语言,具有强大的面向对象编程特性。Python中的Class是实现面向对象编程的重要组成部分,一个Class可以包含多个属性和方法,可以用来创建对象。下面将从多个方面对Python Class用于面向对象编程进行详细的阐述。

    2024-03-23
    82
  • 苏涛:对抗样本技术在互联网安全领域的应用

    苏涛:对抗样本技术在互联网安全领域的应用导读: 验证码作为网络安全的第一道屏障,其重要程度不言而喻。当前,卷积神经网络的高速发展使得许多验证码的安全性大大降低,一些新型验证码甚至选择牺牲可用性从而保证安全性。针对对抗样本技术的研究,给验证码

    2023-05-21
    149
  • 【赵强老师】大数据分析引擎:Presto[通俗易懂]

    【赵强老师】大数据分析引擎:Presto[通俗易懂]一、什么是Presto? 背景知识:Hive的缺点和Presto的背景 Hive使用MapReduce作为底层计算框架,是专为批处理设计的。但随着数据越来越多,使用Hive进行一个简单的数据查询可能要

    2023-02-13
    144

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注