MySQL查询慢日志

要查看MySQL 5.7版本的慢查询日志,需要先开启慢查询日志功能,然后设置相关的配置参数,具体步骤如下:

开启慢查询日志功能 在MySQL配置文件(如my.cnf)的[mysqld]节点下增加以下配置项:

codeslow_query_log=1
slow_query_log_file=/path/to/slow.log

其中slow_query_log_file指定慢查询日志文件的存储路径和名称。

设置慢查询阈值 通过long_query_time参数设置慢查询的阈值时间(单位:秒),超过该时间的查询会被记录:

codelong_query_time=2

上面示例设置慢查询阈值为2秒。

重启MySQL服务使配置生效

修改配置文件后,需要重启MySQL服务使新配置生效。

查看慢查询日志

开启慢查询日志后,超过设定阈值的SQL语句就会记录在指定的慢查询日志文件中了。可以用文本编辑器或其他工具查看日志文件的内容。 日志文件中记录了SQL语句的执行时间,锁定时间,发送到服务器时间等信息,可以根据这些数据分析查询慢的原因并优化SQL语句。

需要注意的是,MySQL默认没有开启慢查询日志功能,开启后会对性能有一定影响,所以通常只在调优优化时临时开启,日常运行时关闭。

使用慢查询分析工具:如果你需要分析慢查询日志,可以使用MySQL自带的慢查询分析工具mysqldumpslow。根据和,mysqldumpslow的一些常用命令如下:

mysqldumpslow s c t 10 /var/run/mysqld/mysqldslow.log:取出使用最多的10条慢查询。 mysqldumpslow s t t 3 /var/run/mysqld/mysqldslow.log:取出查询时间最慢的3条慢查询。 mysqldumpslow s t t 10 g "left join" /database/mysql/slowlog:得到按照时间排序的前10条里面含有左连接的查询语句。

慢日志格式说明

时间戳:每一行慢查询日志的开始都有一个时间戳,格式为# Time: YYYY-MM-DDTHH:MM:SS.XXXXXXZ,表示查询开始执行的时间。

用户和主机:紧接着时间戳的是User@Host,格式为用户名[用户名] @ 主机地址 [IP地址],表示执行该查询的用户和来源主机。

线程ID:Id:后面跟的数字是线程ID,这是MySQL服务器内部用来唯一标识一个客户端连接的数字。

查询时间:Query_time:后面跟的数字表示执行该查询所需的总时间,单位是秒。

锁时间:Lock_time:后面跟的数字表示查询在获取必要的锁时花费的时间。

返回行数:Rows_sent:后面跟的数字表示查询返回给客户端的行数。

扫描行数:Rows_examined:后面跟的数字表示查询执行过程中MySQL扫描的行数。如果这个数字非常大,而返回的行数很少,可能意味着查询需要优化。

查询SQL:日志的最后部分是实际执行的SQL语句,可能包含多个表的连接、分组、排序等操作。

分析:通过查看Query_time和Rows_examined,可以判断哪些查询可能需要优化。如果一个查询的Query_time很高,同时Rows_examined也很高,这通常意味着查询执行效率低下。

针对日志示例,可以关注以下几个方面:

查询时间:找出Query_time最长的查询,这些查询可能是优化的首选。 扫描行数:如果Rows_examined非常大,但是Rows_sent很小,可能意味着查询条件没有很好地过滤数据,导致扫描了过多的行。 重复查询:如果发现有多个慢查询日志条目是执行相同或非常相似的SQL语句,这可能表明该查询被频繁执行,优化它可能会带来较大的性能提升。 全表扫描:如果Rows_examined接近表的总行数,这可能意味着查询没有使用索引,需要检查索引策略。

Pasa吴技术博客
请先登录后发表评论
  • latest comments
  • 总共0条评论