MySQL数据库慢查询

MYSQL数据库慢查询主要用于跟踪异常的SQL语句,可以分析出当前程序里那些Sql语句比较耗费资源,慢查询日志则用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL语句,会被记录到慢查询日志中。

Mysql数据库默认没有开启慢查询日志功能,需手动在配置文件或者MYSQL命令行中开启,慢查询日志默认写入磁盘中的文件,也可以将慢查询日志写入到数据库表。

查看数据库是否开启慢查询,如图11-9(a)、11-9(b)所示,命令如下:

show variables like “%slow%”;

show variables like “%long_query%”;

图11-9(a) MYSQL数据库慢查询功能

图11-9(b) MYSQL数据库慢查询功能

MYSQL慢查询参数详解如下:

log_slow_queries         关闭慢查询日志功能;

long_query_time         慢查询超时时间,默认为10s,MYSQL5.5以上可以设置微秒;

slow_query_log          关闭慢查询日志;

slow_query_log_file         慢查询日志文件;

slow_launch_time Thread create时间,单位秒,如果thread create的时间超过了这个值,该变量slow_launch_time的值会加1;

log-queries-not-using-indexes 记录未添加索引的SQL语句。

开启MYSQL慢查询日志方法有两种:

  1. Mysql数据库命令行执行命令:
set global slow_query_log=on;

show variables like “%slow%”;

  1. 编辑my.cnf配置文件中添加如下代码:
log-slow-queries = /data/mysql/localhost.log

long_query_time = 0.01

log-queries-not-using-indexes

慢查询功能开启之后,数据库会自动将执行时间超过设定时间的SQL语句添加至慢查询日志文件中,可以通过慢查询日志文件定位执行慢的SQL,从而对其优化,可以通过mysqldumpslow命令行工具分析日志,相关参数如下:

执行命令mysqldumpslow -h可以查看命令帮助信息:

主要参数包括:-s和-t

-s 这个是排序参数,可选的有:

l: 查询锁的总时间;

r: 返回记录数;

t: 查询总时间排序;

al: 平均锁定时间;

ar: 平均返回记录数;

at: 平均查询时间;

c: 计数;

-t n 显示头n条记录。

MYSQL慢查询mysqldumpslow按照返回的行数从大到小,查看前2行,如图11-10所,命令如下:

mysqldumpslow -s r -t 2 localhost.log

图11-10 mysqldumpslow以返回记录排序

MYSQL慢查询mysqldumpslow按照查询总时间从大到小,查看前5行,同时过滤select的sql语句,如图11-11所,命令如下:

mysqldumpslow -s t -t 5 -g “select” localhost.log

图11-11 mysqldumpslow以查询总时间排序