一次MySQL反应慢排查

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

MySQL反应慢排查

前言

话说某天的一个阳光明媚的下午,我正在公司的楼下喝着咖啡,听着歌。本来心情美滋滋,突然微信收到一条消息:‘现在10.X.X.X MySQL 反应很慢,xx库反应都很慢’,婉如晴天霹雳,百米冲刺的速度跑到办公桌前开始排查问题。

第一招 纵览大局

登录到MySQL系统中,第一件事,先进行top来确定一个大范围。如下几个比较重要的信息

 load average #当前OS的系统负载,分别是1分钟,5分钟,15分钟。主要目的是确定当前的系统大概的压力范围。
 %Cpu(s):  0.0 us,  0.3 sy,  0.0 wa #分别对应用户执行程序所消耗的资源占CPU的百分比、内核所消耗占CPU的百分比、等待IO输入输出占CPU时间百分比
KiB Mem :   481876 total,     9300 free,   269364 used,   203212 buff/cache
KiB Swap:  2096124 total,  2094580 free,     1544 used.   165964 avail Mem

#MEM、SWAP的总量、使用、空闲 

一般情况,在观察top输出中,如果发现 us很高,可能是慢查询,SQL执行效率差导致,等其他原因导致的。
如果是sy很高,可能是锁、NUMA等导致。
如果是wa很高,可能是MySQL大量使用临时表、在进行存在备份任务 需要iotop在一次确认等。
如果是Mem中的free空闲内存较少,请检查是否发生内存泄漏,是否使用大量的内存临时表或者错误的参数配置等。
如果是KiB Swap频繁使用,请检查vm.swappiness参数和NUMA是否关闭。

第二招 细化分析

登录到系统中打开慢查询日志 tail -0f 慢查询.log 或者查询最近期间的慢查询日志,主要检查是否有复杂的SQL 有大量的排序、分组、like %等大量不走索引或者需要临时表操作。

并且登录到MySQL中进行查看是否有事物未提交,是否有发生锁等待。
select * from information_schema.INNODB_TRX

查看大事物。主要观察当前事物执行状态和事物执行时间。

select * from information_schema.INNODB_LOCKS#查看当前锁信息。主要观察当前有多少行被锁住

select * from information_schema.PROCESSLIST #查看当前的SQL执行情况。主要观察是否有 Waiting for table metadata lock 或者表锁、全局读锁等SQL。

还有观察当前的MySQL每秒的TPSQPS、当前的连接数、错误连接数。如果你的TPSQPS达到了历史高峰,并和业务确认是业务猛增,那么恭喜了。如果是连接数达到了高峰期,请和开发同学确认,是否代码出现了bug,例如连接未关闭等。

IO排查需要使用iotoppt-ioprofilesar等,主要关注每秒的顺序和随机写入、读取量,当前的队列数等值。

网络排查则需要使用ping 网关orAPP,检查是否丢包,是否有延迟。补充知识点ping可以指定参数 -l 和 -f快速检测丢包和检测丢包。

总结

上述MySQL反应慢是常见问题,几乎每个DBA或多或少都遇见过,但每个人使用的工具和排查思路的方式和方法是不一样的。本文也是简单介绍一下改如何排查,除了这些方法以外还有其他原因导致MySQL反应慢嘛,有的 笔者曾经出来过一起故障 MySQL反应慢,MySQL版本是6.0的比较特殊。希望能给你的学习和工作带来收获。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
Java 最常见的面试题:mysql 问题排查都有哪些手段?
Java 最常见的面试题:mysql 问题排查都有哪些手段?
|
5月前
|
SQL 存储 关系型数据库
mysql 利用 performance_schema 排查 qps 过高过程记录
mysql 利用 performance_schema 排查 qps 过高过程记录
83 0
|
5月前
|
Java 关系型数据库 MySQL
记一次mysql线上问题排查
背景是这样的,我们有个系统每天都会调起多个定时任务,首先quartz每分钟会调起一次检查时间的任务,如果发现时间到达设定的任务执行时间,java代码会向数据库里写入一条记录,然后有另外一个系统就会根据这条记录执行相应的任务,有天有同事反馈说有条定时任务没执行。。
44 0
|
9月前
|
SQL 监控 Oracle
MySQL发现sql语句执行很慢排查建议
MySQL发现sql语句执行很慢排查建议
396 0
|
9月前
|
SQL 关系型数据库 MySQL
mysql线上连接超时和字段过长排查思路
mysql线上连接超时和字段过长排查思路
|
11月前
|
存储 SQL 缓存
mysql的启动关闭原理和实战、及常见的错误排查
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
377 0
|
SQL 关系型数据库 MySQL
|
关系型数据库 MySQL 数据库
在Navicat for mysql、双击、表无反应
在Navicat for mysql、双击、表无反应
174 0
在Navicat for mysql、双击、表无反应
|
SQL 存储 关系型数据库
全面了解mysql锁机制(InnoDB)与问题排查
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高 ,并发度最低。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
1053 0
全面了解mysql锁机制(InnoDB)与问题排查
|
SQL 关系型数据库 MySQL
MySQL大无语事件:一次生产环境的死锁事故,看看我怎么排查
今天要分享的是在生产环境中出现的一次算得上比较诡异的死锁事件, 不过庆幸的是没有产生较大的业务损失.