聊聊什么是慢查、如何监控?如何排查?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 今天我要跟你分享的话题是:“聊聊什么是慢查、如何监控?如何排查?”

Hi,大家好!我是白日梦。

今天我要跟你分享的话题是:“聊聊什么是慢查、如何监控?如何排查?”


一、 推荐阅读方式#


首发地址:https://mp.weixin.qq.com/s/tXTLMCiVpEnnmhUclYR19Q


使用推荐阅读,有更好的阅读体验


二、什么是慢查?#


慢查,顾名思义就是很慢的查询。SQL的执行总是有一个执行时间的,通过long_query_time参数告诉MySQL,当SQL的执行时间超过该参数的指定值后就将这条SQL记录在慢查日志中。

默认的long_query_time默认值为10s




三、怎么调整界定慢查的时间?#


设置全局慢查时间为0.2秒。



注意:long_query_time属于dynamic类型的参数。意思是像上面这样在会话A中通过命令行的方式设置全局 long_query_time为0.2秒后,再打开一个新的会话B查看该变量会发现 long_query_time=0.2

但是在会话A中查看session级别的long_query_time依然为默认的10s



四、慢查日志像binlog那样是真实的日志文件吗?#


在MySQL5.1之前确实慢查日志确实是以文件的形式存在。但是MySQL5.1之后MySQL允许我们可以将慢查日志放入一个数据表中,便于我们查看分析。



现在公司使用的一般都是5.6~5.7版本。当然即使5.1版本之后支持了将数据放入Table中,默认配置依然是File。

当然你也可以通过下面的命令将慢查输出类型改成Table




五、慢查有什么危害?#


研发同学都知道:对于Linux操作系统来说,一个进程能打开的Socket文件句柄是上限的。即使我们可以动态的调整它的大小,但是也做不到无限大。

通过命令: 查看进程被限制的使用各种资源的量


Copyulimit -a 
core file size: 进程崩溃是转储文件大小限制
man loaded memort 最大锁定内存大小
open file 能打开的文件句柄数


大量的慢查占据MySQL连接(Linux操作系统会为每一条连接创建socket文件),慢查累积到一定程度还会导致正常的SQL得不到连接执行从而变成慢查SQL,最终有可能导致MySQL的连接全部被耗光而夯死。这就是生产级别的事故了。



六、如何监控慢查?#


查看曾经执行完成的慢查

如果你需要编写一个监控程序探测MySQL的慢查询。那完全可以探测分析MySQL的slow.log

如果你还不知道slow.log在哪里,可以像下面这样定位到它。slow.log中记录的就是曾经执行过的慢查信息。



这是你可以尝试使用select sleep(2);模拟一条慢查SQL

然后去慢查sql中查看具体的慢查详情。



查看正在进行的慢查SQL

我在A Session中发起SQL,select sleep(60);

然后在B Session中通过下图的方式可以看到当前正在进行的慢查情况。大家在看的时候注意:Command的类型为Query



MySQL也为用户提供了一些原生的慢查工具。比如:查看执行时间最长的10条SQL

mysqldumpslow -s a1 -n 10 mysql.slow_log

了解即可



七、线上出慢查了如何处理?#


首先你得知道通常情况下每个公司都有自己监控系统,或者是监控脚本,具体的监控逻辑就是上节讲述的思路。故一旦出现报警,DBA同学会在第一时间接到消息。

DBA同学一般都会去联系业务同学,由业务同学去处理这个慢查。(相信已经工作的同学深有这个体会)

(更多内容欢迎关注白日梦的公众号阅读)

关注我看更多内容,每早推送,可以在地铁、班车上、上班前阅读! ......

查看MySQL专题110篇文章大纲:https://mp.weixin.qq.com/s/HTw-Z-SyprYA8bCBZ4NpGQ



参考:https://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html



推荐阅读#


  1. 大家常说的基数是什么?(已发布)
  2. 讲讲什么是慢查!如何监控?如何排查?(已发布)
  3. 对NotNull字段插入Null值有啥现象?(已发布)
  4. 能谈谈 date、datetime、time、timestamp、year的区别吗?(已发布)
  5. 了解数据库的查询缓存和BufferPool吗?谈谈看!(已发布)
  6. 你知道数据库缓冲池中的LRU-List吗?(已发布)
  7. 谈谈数据库缓冲池中的Free-List?(已发布)
  8. 谈谈数据库缓冲池中的Flush-List?(已发布)
  9. 了解脏页刷回磁盘的时机吗?(已发布)
  10. 用十一张图讲清楚,当你CRUD时BufferPool中发生了什么!以及BufferPool的优化!(已发布)
  11. 听说过表空间没?什么是表空间?什么是数据表?(已发布)
  12. 谈谈MySQL的:数据区、数据段、数据页、数据页究竟长什么样?了解数据页分裂吗?谈谈看!(已发布)
  13. 谈谈MySQL的行记录是什么?长啥样?(已发布)
  14. 了解MySQL的行溢出机制吗?(已发布)
  15. 说说fsync这个系统调用吧! (已发布)
  16. 简述undo log、truncate、以及undo log如何帮你回滚事物! (已发布)
  17. 我劝!这位年轻人不讲MVCC,耗子尾汁! (已发布)
  18. MySQL的崩溃恢复到底是怎么回事? (已发布)
  19. MySQL的binlog有啥用?谁写的?在哪里?怎么配置 (已发布)
  20. MySQL的bin log的写入机制 (已发布)


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
SQL
线上问题排查日志实战
线上问题排查日志实战
50 1
|
7月前
日志 问题排查
日志 问题排查
41 1
|
监控 网络协议 前端开发
502问题怎么排查?
502问题怎么排查?
181 0
|
运维 PHP Perl
总结一些线上问题排查的命令,可能用得到!
开发运维,统计所遇到的运维问提。运维问提排查,以下场景,你可能遇到?
180 0
总结一些线上问题排查的命令,可能用得到!
|
7月前
|
数据采集 监控 Kubernetes
【最佳实践】使用CloudLens排查iLogtail采集配置错误问题
本文主要介绍如何使用CloudLens for SLS定位和解决iLogtail日常使用中的常见问题之一:采集配置错误问题。
435 0
【最佳实践】使用CloudLens排查iLogtail采集配置错误问题
|
关系型数据库 MySQL 数据库
MySQLTransactionRollbackException问题排查
MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction MySQL error 1129
475 0
|
Kubernetes Docker 容器
问题排查
问题排查
100 0
|
Java 关系型数据库 数据库
关于SQLRecoverableException问题的排查和分析
上周在升级的时候,客户反馈某个job报了下面的错误,想让我们查看一下是不是数据库这边有什么问题。 报错的内容如下。Caused by: java.sql.SQLRecoverableException: No more data to read from socket         at oracle.
3215 0
|
缓存 运维 监控
你所需要掌握的问题排查知识
你所需要掌握的问题排查知识
313 0
|
存储 弹性计算 运维
SLS新版告警入门-监控主机CPU异常
随着用户量的增加,后台服务经常需要部署在多台服务器或者集群中来提高性能和增强可用性,在提供服务的过程中,由于程序bug或者业务徒增导致CPU飙高,如果CPU持续飙高,可能会导致机器down机,对服务造成不可用。 本文以此为背景,在主机监控时序数据中,配置SLS告警,来监控主机CPU飙高,并且在CPU飙高时发出告警到钉钉机器人。
608 0