mysql5.7查询慢:什么SQL慢?请看MySQL慢查询日志
前言在项目里面,多多少少都隐藏着一些执行比较慢的SQL, 不同的开发测试人员在平时使用的过程中多多少少都能够遇到,但是无法立马有时间去排查解决。那么如果有一个文件能够将这些使用过程中比较慢的SQL记录
顺晟科技
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
复制代码
一般用法:
mysqldumpslow-s r-t 10/usr/local/MySQL/data/Alvin-slow-slow . log
mysqldumpslow-s c-t 10/usr/local/MySQL/data/Alvin-slow-slow . log
mysqldumpslow-s t-t 10-g & amp;# 039;left join & amp# 039;/usr/local/MySQL/data/Alvin-slow-;
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日志。否则,可能会影响性能。