前言
在我的项目外面,多多少少都暗藏着一些执行比较慢的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日志,不然可能影响性能哦。