前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >性能分析之MySQL慢查询日志分析(慢查询日志)

性能分析之MySQL慢查询日志分析(慢查询日志)

原创
作者头像
小明爱吃火锅
发布2023-09-30 17:07:47
6020
发布2023-09-30 17:07:47
举报
文章被收录于专栏:小明说Java

一、背景

MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应的时间超过阈值的语句,具体指运行时间超过long_query_time(默认是10秒)值的SQL,会被记录到慢查询日志中。

慢查询日志一般用于性能分析时开启,收集慢SQL然后通过explain进行全面分析,一般来说,生产是不会开启的,收集慢查询语句是十分耗性能的,但是我们在测试环境是可以模拟分析的,优化SQL语句,接下来就通过实战,讲解如何开启慢日志查询以及如何分析。

二、慢查询日志开启

1)查看是否开启,默认是关闭的

代码语言:javascript
复制
show VARIABLES like '%slow_query_log%'

可以看到默认慢日志的保存文件以及状态

2)开启:

代码语言:javascript
复制
#只会开启当前MySQL的慢日志查询,如果需要永久的话需要修改my.cnf/my.ini文件

set GLOBAL slow_query_log=1

3)查看默认慢查询sql默认时间,大于10秒,没有等于

代码语言:javascript
复制
show VARIABLES like 'long_query_time%'

4)设置sql查询超时时间

代码语言:javascript
复制
set GLOBAL long_query_time=3

但是修改为不会立即生效,两种办法:

  • 关闭数据库回话重新连接
  • 使用 show global VARIABLES like 'long_query_time%' 查看

三、模拟慢sql并分析

由于本次数据库安装通过docker安装,所以需要进入到mysql容器内部去查看慢日志,上面看到慢日志地址/var/lib/mysql/dca928abb464-slow.log,也是mysql容器里面的。

1)docker进入MySQL容器

代码语言:javascript
复制
docker exec -it e1066fe2db35(mysql容器) /bin/bash

2)此时进入mysql环境,当未登录进入,可以查看slow_query_log_file文件信息

代码语言:javascript
复制
cat /var/lib/mysql/dca928abb464-slow.log

3)Navicat客户端模拟,查询超时,睡眠4秒,由于我们上面设置了查询超过3s保存慢日志

代码语言:javascript
复制
select sleep(4);

4)再一次查看cat /var/lib/mysql/dca928abb464-slow.log 文件,可以看到那个sql语句变慢了,以及耗时多久

只要是超过long_query_time的sql都会被记录

5)查看当前数据有多少条慢sql

代码语言:javascript
复制
show GLOBAL  STATUS like '%slow_queries%'

6)慢日志分析工具:mysqldumpslow,这个大家有兴趣的可以去详细了解如何使用。

指定日志文件,查看记录集中最多的sql

代码语言:javascript
复制
mysqldumpslow -s r -t 10 /var/lib/mysql/dca928abb464-slow.log

三、总结

本文通过实战demo,一步一步配置分析如何利用慢日志去定位查询耗时的sql语句,在实际工作中,一般将生产的数据拷贝到测试环境,在测试环境开启慢日志,模拟生产接口调用,进而去查看慢日志文件,定位是那个sql耗时的。

我正在参与 腾讯云开发者社区数据库专题有奖征文

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、慢查询日志开启
  • 三、模拟慢sql并分析
  • 三、总结
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档