关于c++:你的哪些SQL慢看看MySQL慢查询日志吧

10次阅读

共计 2389 个字符,预计需要花费 6 分钟才能阅读完成。

前言
在我的项目外面,多多少少都暗藏着一些执行比较慢的 SQL, 不同的开发测试人员在平时应用的过程中多多少少都可能遇到,然而无奈立马有工夫去排查解决。那么如果有一个文件可能将这些应用过程中比较慢的 SQL 记录下来,定期去剖析排查,那该多美妙啊。这种状况 MySQL 也替咱们想到了,它提供了 SQL 慢查问的日志,本文就分享下如何应用吧。
什么是慢查问日志?
MySQL 的慢询日志,提供了记录在 MySQL 中响应工夫超过指定阈值语句的性能,比方设定阈值为 3 秒,那么任何 SQL 执行超过 3 秒都会被记录下来。
咱们借助慢查问日志性能能够发现哪些那些执行工夫特地长的询,并且有针对性地进行优化,从而进步零碎的整体效率。
怎么开启慢查问日志?
默认状况下,MySQL 数据库没有开启慢查问日志,因为多多少少会带来肯定性能的影响。咱们能够在开发测试环境、或者生产环境做调优的时候开启,那怎么查看是否开启了呢?

查看慢 SQL 是否开启

执行上面命令查看是否开启慢 SQL
show variables like ‘%slow_query_log’;
复制代码

OFF: 未开启
ON: 开启

如何开启慢查问

执行上面的命令开启慢查问日志
set global slow_query_log=’ON’;
复制代码

批改慢查问阈值

后面介绍了 SQL 执行达到了制订的工夫阈值后记录到慢查问日志中,那么如何设置呢?
set global long_query_time = N;

set long_query_time = N
复制代码

设置 global 的形式对以后 session 的 long_query_time 生效。对新连贯的客户端无效。所以能够一并执行下述语句

N 示意设置的阈值,单位为秒

这里的 show global variables like ‘%long_query_time%’; 能够查看阈值大小

如何设置永恒失效

后面是通过命令行的形式设置,如果 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=FILE
复制代码
慢查问日志在哪里呢?
后面解说了如何开启 MySQL 的慢查问日志,那么它把日志记录在哪里了呢?

查看慢查问日志地位

通过 show variables like ‘%slow_query_log_file%’; 命令能够查看慢 SQL 文件地位,如下图所示:

批改慢查问日志地位

也很简略,执行上面的命令即可:
set global slow_query_log_file = ‘/usr/local/mysql/data/alvin-slow-slow.log’;
复制代码
怎么查看慢 SQL 内容?
当初咱们曾经晓得慢查问日志在哪里了,那么如何查看外面的内容呢?咱们这里用一个例子演示下吧。

执行一个查问的 SQL

执行花了 1 秒多,超过了后面设置的阈值 1s

查看慢查问数目

执行上面命令查问以后零碎中有多少条慢查问记录
SHOW GLOBAL STATUS LIKE ‘%Slow_queries%’;
复制代码

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 命令查看应用。
举例:咱们想要依照查问工夫排序,查看前五条 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 “left join” /usr/local/mysql/data/alvin-slow-slow.log

另外倡议在应用这些命令时联合 | 和 more 应用,否则有可能呈现爆屏状况

mysqldumpslow -s r -t 10 /usr/local/mysql/data/alvin-slow-slow.log | more
复制代码
怎么删除慢 SQL 日志?
当初慢查问日志很多了啊,为了不相互混同,我要删除一些慢 SQL 日志,怎么删除呢?

手动删除慢查问日志文件即可, 也就是 rm 命令。
应用命令 mysqladmin flush-logs 重置慢 sql 日志内容,残缺命令如下:

mysqladmin -uroot -p flush-logs slow
复制代码
总结
本文解说了慢 SQL 日志该如何关上以及应用,是十分重要无效的排查伎俩,最初记得在排查结束当前,要敞开慢 SQL 日志,不然可能影响性能哦。

正文完
 0