mysql慢查询_mysql慢查询为何要用
全栈程序员-用户IM 2022年10月15日 上午8:46 未分类
mysql慢查询_mysql慢查询为何要用1概念MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阈值的词句。具体环境中,运行时间超过long_query_time值的SQL句子,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是记录运行10秒以上的词句。默认情况下,MySQL数据库并不启动慢查询日志,需要自动来设置这个参数。当然,如果…
大家好,又碰面了,我是大家的同事全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程早已失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
1 概念
MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阈值的词句。
具体环境中,运行时间超过long_query_time值的SQL句子,则会被记录到慢查询日志中。
long_query_time的默认值为10,意思是记录运行10秒以上的词句。
默认情况下,MySQL数据库并不启动慢查询日志,需要自动来设置这个参数。
当然,如果不是调优须要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。
慢查询日志支持将日志记录写入文件和数据库表。
官方文档,关于慢查询的日志介绍如下(部分资料,具体参考官方相关链接):
2 参数
MySQL 慢查询的相关参数解释:
slow_query_log:是否开启慢查询日志,1表示开启,0表示关掉。
log-slow-queries:旧版(5.6以下版本)MySQL数据库慢查询日志储存路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志储存路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
long_query_time:慢查询阀值,当查询时间少于设定的阀值时,记录日志。
log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
log_output:日志储存方法。log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库。
3 配置3.1 slow_query_log
默认情况下slow_query_log的值为OFF,表示慢查询日志是禁用的,可以通过设置slow_query_log的值来开启,如下所示:
#c:2:1:9:7:1:b:d:e:c:8:4:c:8:9:c:7:0:b:9:2:d:3:6:b:1:1:a:6:6:a:6#
使用set global slow_query_log=1开启了慢查询日志只对当前数据库生效,MySQL重启后则会失效。
如果要永久生效,就必须更改配置文件my.cnf(其它系统变量也是这么)。
my.cnf要降低或更改参数slow_query_log 和slow_query_log_file,如下所示
#7:3:5:b:1:6:4:0:1:6:e:c:2:9:4:c:3:f:a:b:6:c:3:0:b:2:8:6:a:9:a:d#
然后重启MySQL服务器。
3.2 slow_query_log_file
这个参数用于指定慢查询日志的储存路径,缺省情况是host_name-slow.log文件,
#6:1:f:e:c:1:e:b:2:7:d:a:6:8:2:f:8:8:7:a:8:5:9:0:2:8:c:2:b:b:6:6#
3.3long_query_time
开启了慢查询日志后,什么样的SQL就会记录到慢查询日志上面呢?
这个是由参数long_query_time控制,默认情况下long_query_time的值为10秒,可以使用命令更改,也可以在my.cnf参数上面更改。
关于运行时间刚好等于long_query_time的情况,并不会被记录出来。
也就是说,在mysql源码里是判定小于long_query_time,而非小于等于。
从MySQL 5.1开始,long_query_time开始以毫秒记录SQL句子运行时间,之前仅用秒为单位记录。
如果记录到表上面,只会记录整数部份,不会记录毫秒部份。
#c:f:6:9:6:8:4:f:f:1:e:0:b:3:2:1:6:9:f:e:b:a:e:0:a:e:1:1:f:3:9:d#
如上所示,我更改了变量long_query_time,但是查询变量long_query_time的值还是10,难道没有更改到呢?
注意:使用命令 set global long_query_time=4修改后,需要重新联接或新开一个会话能够看见更改值。
用show variables like 'long_query_time'查看是当前会话的变量值。
也可以不用重新联接会话,而是用show global variables like 'long_query_time';。
3.4 log_output
log_output参数指定日志的储存形式。
log_output='FILE'表示将日志存入文件,默认值也是'FILE'。
log_output='TABLE'表示将日志存入数据库,这样日志信息都会被写入到mysql.slow_log表中。
同时也支持两种日志储存方法,配置的时侯以冒号隔开即可,如:log_output='FILE,TABLE'。
日志记录到系统的专用日志表中,要比记录到文件花费更多的系统资源。
因此对于须要启用慢查询日志,又须要就能获得更高的系统性能,那么建议优先记录到文件。
#3:d:7:7:c:1:e:5:2:2:6:1:e:f:2:d:9:a:c:1:6:2:8:4:a:7:6:c:6:f:c:9#
3.5 log-queries-not-using-indexes
该系统变量指定未使用索引的查询也被记录到慢查询日志中(可选项)。
如果调优的话,建议开启这个选项。
另外,开启了这个参数,其实使用full index scan的SQL也会被记录到慢查询日志。
#a:d:6:b:4:a:7:d:c:5:7:4:7:1:7:e:1:e:5:b:c:f:8:b:9:d:d:b:8:c:9:4#
3.6log_slow_admin_statements
这个系统变量表示,是否将慢管理句子比如ANALYZE TABLE和ALTER TABLE等计入慢查询日志。
#5:2:9:0:9:b:2:b:4:d:7:1:3:b:7:d:5:c:2:a:f:6:8:4:0:e:6:2:0:c:f:e#
3.7Slow_queries
如果你想查询有多少条慢查询记录,可以使用Slow_queries系统变量。
#7:9:9:6:7:a:1:8:b:5:7:f:1:b:9:5:5:6:1:e:b:f:0:e:1:9:7:b:9:b:6:7#
另外,还有log_slow_slave_statements 和--log-short-format 参数,可到MySQL网站了解。
4 mysqldumpslow工具
在生产环境中,如果要手工剖析日志,查找、分析SQL,显然是个体力活。
MySQL提供了日志剖析工具mysqldumpslow
查看mysqldumpslow的帮助信息:
#5:b:f:2:5:4:5:8:d:9:7:a:e:9:2:e:8:0:2:7:0:2:2:e:8:6:c:d:e:1:b:7#
比如,得到返回记录集最多的10个SQL。
#6:2:4:5:3:2:5:c:c:f:9:8:f:7:3:d:d:1:b:5:2:8:4:b:0:2:8:4:1:7:b:2#
得到访问次数最多的10个SQL
#9:a:3:c:a:1:5:3:f:6:8:2:e:8:4:c:4:7:1:a:b:4:a:e:2:1:9:4:1:9:3:8#
得到依照时间排序的前10条上面富含左联接的查询词句。
#3:8:0:c:1:2:d:a:d:b:6:9:8:d:9:9:f:4:8:8:0:1:d:6:f:5:1:8:8:9:6:d#
另外建议在使用这种命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。
#f:2:a:f:b:8:b:3:1:b:a:8:7:d:a:6:7:9:9:5:4:2:d:c:1:f:0:9:b:d:4:1#
——————————————————end——————————————————
欢迎诸位交流
群主每周会精选一些实战技术文章发布在微信群,提供给诸位交流阐述与学习。考虑到群内讨论内容会导致消息被顶,因此我每周会汇总目录到我的公众号主菜单。