MySQL慢查询日志提供超过指定时间阈值的查询信息,为性能优化提供主要参考,是一个非常实用的功能。MySQL慢查询日志的开启和配置非常简单。可以指定记录的文件(或表),超过的时间阈值可以记录到慢sql中。说实话,和sqlserver的trace或者extendedevents(虽然这两者的功能不止于此)相比,mysql的配置总给人一种很清爽的感觉。1.打开慢查询日志。一般情况下只需要在配置文件中添加slow_query_log=1配置即可,即开启慢查询日志。如果不指定slow_query_log_file,会自动生成一个主机名+'slow'.log文件。2、默认情况下,记录慢查询的时间阈值为10s。默认情况下,如果指定slow_query_log=1,则启动MySQL开启慢查询,并自动生成一个默认的主机名++'slow'.log文件。记录超过执行时间超过10秒的慢查询。也可以显式指定慢查询的日志文件名(不存在会自动创建)和记录慢查询的时间阈值(不是默认的10s)。注意在配置文件中指定long_query_time时,不需要时间单位,只需要一个值,比如1表示1s。如果包含时间单位,则服务不会启动。下面是在日志文件中记录慢SQL的例子3,将慢查询日志记录到表配置中:需要添加一个log_output配置,可以在表中记录慢查询。mysql库下有一个默认的slow_log表,可以直接设置slow_query_log_file=slow_log,将慢查询日志记录到表中。记录的慢sql如下。可以发现sql_text是二进制信息,不是原始的sql文本,可以通过CONVERT函数进行转换。关于记录在日志文件和表中的慢查询的区别:1、慢查询记录在日志文件和表中,记录本身区别不大。如果用表来记录,慢查询的执行时间信息就不能精确到细微。2、如果将慢查询信息记录在表中,查询起来方便,但由于是结构化数据,可能比记录在慢查询日志文件(纯文本文件)中慢一点(个人猜测),如果记录到文件需要用mysqldumpslow工具解析。3、慢查询不记录失败的查询。例如long_query_time设置为10(10秒),超过10秒的查询由于其他原因执行失败,MySQL慢查询将无法记录该查询信息。
