18910140161

mysql5.7查询慢:什么SQL慢?请看MySQL慢查询日志

顺晟科技

2023-02-26 10:05:06

200

前言

项目中隐藏着运行得有点慢的SQL,其他开发人员测试人员在平时使用的过程中会遇到一定程度的问题,但没有时间立即解决。因此,如果在这些使用过程中,有一个文件可以记录缓慢的SQL,并定期进行分析,那该有多好。在这种情况下,MySQL也会提供SQL缓慢查询的日志。本文共享使用方法。

什么是慢查询日志?

MySQL的慢查询日志提供了记录MySQL超过指定阈值语句的响应时间的功能。例如,如果将阈值设置为3秒,则所有SQL执行都将记录3秒以上。

通过缓慢的查询日志功能,您可以找到执行时间特别长的查询,并根据需要进行优化,从而提高系统的整体效率。

如何打开缓慢的查询日志?

默认情况下,MySQL数据库不打开慢查询日志。因为这在一定程度上影响了性能。可以在开发测试环境或调整生产环境时打开。能确认一下是怎么打开的吗?

确认缓慢的SQL已打开

运行以下命令,验证缓慢的SQL是否已打开

Show variables like & amp# 039;% slow _ query _ log & amp# 039;

复制代码

图片

关闭:未打开

打开:打开

如何打开慢查询

运行以下命令以打开缓慢的查询日志

Set global slow _ query _ log=& amp# 039;ON & amp# 039;

复制代码

图片

修改缓慢查询阈值

如果上述SQL执行达到设定的时间阈值后被记录在缓慢的查询日志中,该如何设置?

set global long _ query _ time=N;

Setlong _ query _ time=n

复制代码

全局设置方法对当前会话long_query_time无效。对新连接的客户端有效。因此,可以同时执行以下语句

n表示设置的阈值(秒)

图片

这里是show global variables like & amp# 039;% long _ query _ time % & amp# 039;可以查看阈值大小

如何设置永久效果

以前是通过命令行设置的,当MySQL重新启动时,配置将重置。可以修改MySQL配置my.cfg或my.ini,使其永久生效。

[mysqld]

Slow_query_log=ON #慢查询日志打开开关

slow _ query _ log _ file=/var/lib/MySQL/Alvin-slow . log #关于慢速查询日志的目录和文件名

Long_query_time=3 #如果将慢速查询阈值设置为3秒,则超过此设置的SQL将写入慢速查询日志中

Log _ output=文件

复制代码

慢查询日志在哪里?

我们之前讨论了如何打开MySQL的慢查询日志。那么,将日志记录在哪里呢?

查看缓慢的查询日志位置

Show variables like & amp# 039;% slow _ query _ log _ file % & amp# 039;命令可以查看缓慢的SQL文件位置,如下图所示。

图片

修改缓慢查询日志位置

也很简单。执行以下命令即可:

set global slow _ query _ log _ file=& amp;# 039;/usr/local/MySQL/data/Alvin-slow-slow . log & amp;# 039;

复制代码

如何查看缓慢的SQL内容?

现在已经知道慢查询日志在哪里了。那么,如何确认内容呢?让我举一个例子。

执行一个查询的SQL

图片

执行时间超过1秒,超过了以前设置的阈值1s

查看缓慢的查询数

运行以下命令,查询当前系统中较慢的查询记录数

Show global status like & amp# 039;% slow _ queries % & amp# 039;

复制代码

图片

Value=1表示刚写入日志。

查看日志内容

使用Cat命令查看文件内容时,可以查看相应的缓慢SQL。

图片

缓慢的查询日志分析工具mysqldumpslow

手动分析日志、查找和分析SQL显然是体力活动,MySQL提供了日志分析工具mysqldumpslow。

Mysqldumpslow命令的具体参数如下:

-a:不将数字抽象为n,而是将字符串抽象为s

-s:是指排序方法。

c:访问次数

l:锁定时间

r:返回记录

t:查询时间

Al:平均锁定时间

Ar:返回的平均记录数

At:平均查询时间(默认方法)

Ac:平均查询数

-t:返回以前的数据数。

-g:后面搭配对大小写不敏感的常规匹配模式。

Mysqldumpslow位置您可以在MySQL的bin目录中运行mysqldumpslow - help命令来查看使用情况。

示例:我想按查询时间排序,查看前5条SQL语句。这样写就可以了。

mysqldumpslow-s t-t 5/usr/local/MySQL/data/Alvin-slow-slow . log

复制代码

图片

一般用法:

得到返回记录集最多的10个SQL

mysqldumpslow-s r-t 10/usr/local/MySQL/data/Alvin-slow-slow . log

得到访问次数最多的10个SQL

mysqldumpslow-s c-t 10/usr/local/MySQL/data/Alvin-slow-slow . log

得到按照时间排序的前10条里面含有左连接的查询语句

mysqldumpslow-s t-t 10-g & amp;# 039;left join & amp# 039;/usr/local/MySQL/data/Alvin-slow-;

另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现爆屏情况

mysqldumpslow-s r-t 10/usr/local/MySQL/data/Alvin-slow-slow . log | more

复制代码

如何删除缓慢的SQL日志?

现在慢查询日志很多啊。为了不相互混淆,需要删除缓慢的SQL日志,该如何删除?

您可以手动删除缓慢的查询日志文件(RM命令)。

使用Mysqladmin flush-logs命令重置缓慢的SQL日志内容。完整的命令如下:

MySQL admin-uroot-p flush-logs slow

复制代码

摘要

本文档介绍了如何打开和使用缓慢的SQL日志。这是非常重要和有效的解决问题的手段。最后,故障排除完成后,必须关闭缓慢的SQL日志。否则,可能会影响性能。

  • TAG:
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航