这期内容当中小编将会给大家带来有关如何在MySQL中使用慢查询日志,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

慢查询日志相关参数

MySQL 慢查询的相关参数解释:slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。

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'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据<br>库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需<br>要能够获得更高的系统性能,那么建议优先记录到文件。

一. 设置方法

使用慢查询日志里捕获

启用之前需要先进行一些设置

方法一:全局变量设置

设置慢查询日志的日志文件位置

setglobalslow_query_log_file="D:/slow_log/slow_log.log";

设置是否对未使用索引的SQL进行记录

setgloballog_queries_not_using_indexes=on;

设置只要SQL执行时间超过n秒的就记录

setgloballong_query_time=0.001;

此处设置的0.001秒,便于测试,一般情况比这个大

启用mysql慢查询日志

setglobalslow_query_log=on;

方法二:配置文件设置

修改配置文件my.cnf,在[mysqld]下的下方加入

[mysqld]slow_query_log=ONlog_queries_not_using_indexes=ON;slow_query_log_file=/usr/local/mysql/data/slow.loglong_query_time=1

查看设置后的参数

showvariableslike'slow_query%';showvariableslike'long_query__time';

二. 慢查询日志记录的内容

TimeIdCommandArgument#Time:2019-01-08T04:12:09.269315Z#User@Host:h6_test[h6_test]@localhost[::1]Id:12#Query_time:0.000831Lock_time:0.000198Rows_sent:1Rows_examined:3usemc_productdb;SETtimestamp=1546920729;SELECTt.customer_id,t.title,t.contentFROM(SELECTcustomer_idFROMproduct_commentWHEREproduct_id=199726ANDaudit_status=1LIMIT0,15)aJOINproduct_commenttONa.customer_id=t.comment_id;

Time:执行查询的日期时间

User@Host:执行查询的用户和客户端IP

Id:是执行查询的线程Id

Query_time:SQL执行所消耗的时间

Lock_time:执行查询对记录锁定的时间

Rows_sent:查询返回的行数

Rows_examined:为了返回查询的数据所读取的行数

三. 如何分析慢查询日志

Usage:mysqldumpslow[OPTS...][LOGS...]ParseandsummarizetheMySQLslowquerylog.Optionsare--verboseverbose--debugdebug--helpwritethistexttostandardoutput-vverbose-ddebug-sORDERwhattosortby(al,at,ar,c,l,r,t),'at'isdefaultal:averagelocktimear:averagerowssentat:averagequerytimec:countl:locktimer:rowssentt:querytime-rreversethesortorder(largestlastinsteadoffirst)-tNUMjustshowthetopnqueries-adon'tabstractallnumberstoNandstringsto'S'-nNUMabstractnumberswithatleastndigitswithinnames-gPATTERNgrep:onlyconsiderstmtsthatincludethisstring-hHOSTNAMEhostnameofdbserverfor*-slow.logfilename(canbewildcard),defaultis'*',i.e.matchall-iNAMEnameofserverinstance(ifusingmysql.serverstartupscript)-ldon'tsubtractlocktimefromtotaltime

由于慢查询日志中会含有大量的重复的SQL,为了方便,可以通过mysql提供的命令行工具 mysqldumpslow 来分析日志

$mysqldumpslow.plslow_log.logReadingmysqlslowquerylogfromslow_log.logCount:1Time=0.00s(0s)Lock=0.00s(0s)Rows=0.0(0),0users@0hostsC:\ProgramFiles\MySQL\MySQLServerN.N\bin\mysqld.exe,Version:N.N.N-log(MySQLCommunityServer(GPL)).startedwith:TCPPort:N,NamedPipe:MySQL#Time:N-N-08T04:N:N.269315Z#User@Host:h6_test[h6_test]@localhost[::N]Id:N#Query_time:N.NLock_time:N.NRows_sent:NRows_examined:Nusemc_productdb;SETtimestamp=N;SELECTt.customer_id,t.title,t.contentFROM(SELECTcustomer_idFROMproduct_commentWHEREproduct_id=NANDaudit_status=NLIMITN,N)aJOINproduct_commenttONa.customer_id=t.comment_id

与慢查询日志中记录的数据是相似的,只是多出了一行Count,这一行记录的是这条SQL在记录慢查询日志期间的执行次数,如果一个SQL多次被执行,用这个命令分析时,只会出现一个SQL日志,Count里的数值代表执行次数,其他数字为了合并表示用N代替

上述就是小编为大家分享的如何在MySQL中使用慢查询日志了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。