php开启慢查询,MySQL开启慢查询功能

mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,这是一个有用的日志。它对于性能的影响不大(假设所有查询都很快),并且强调了那些最需要注意的查询(丢失了索引或索引没有得到最佳应用),那如何打开mysql的慢查询日志记录呢?

首先在开启之前得确定下当前mysql是否已经开启了慢日志查询,我们可以在登录了mysql命令行下输入命令:

show variables like "%slow%";

将出现如下结果:

+---------------------+--------------------------------------------+

| Variable_name       | Value                                      |

+---------------------+--------------------------------------------+

| log_slow_queries    | OFF                                        |

| slow_launch_time    | 2                                          |

| slow_query_log      | OFF                                        |

| slow_query_log_file | /home/phpernote.com-slow.log |

+---------------------+--------------------------------------------+

下面对上面查询结果做一下说明:

long_query_time     : 设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s

slow_query_log      :  指定是否开启慢查询日志

log_slow_queries    : 指定是否开启慢查询日志(该参数要被slow_query_log取代,做兼容性保留)

slow_query_log_file :指定慢日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log

long-slow-admin-statements :记录那些慢的optimize table,analyze table和alter table语句

log-slow-Slave-statements :记录由Slave所产生的慢查询

主要看 slow_query_log 这一行的结果,如果为ON表示开启,OFF表示关闭,如上本人的是关闭的。

(1)配置开启

Linux:

在mysql配置文件 my.cnf 中找到[mysqld]标签,在该标签下增加如下语句(#开头的行是注释):

log-slow-queries=/home/phpernote.com-slow.log

#指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log

long_query_time=5 #记录超过的时间,默认为10s,这里设置为查询时间超过5s的查询语句

log-queries-not-using-indexes = on # 列出没有使用索引的查询语句

#log-queries-not-using-indexes 是否记录所有没有使用索引的query,可以根据情况决定是否开启

#log-long-format 是否记录所有的查询记录,包括没有使用索引的查询

注意:自mysql 5起,设置慢查询日志的相关参数做了修改,下面有记述。

Windows:

在 my.ini 的[mysqld]添加如下语句(语句选项以及释义同上):

log-slow-queries = E:\log\www.phpernote.com\mysql_slow_query.log

long_query_time = 5

本人在linux环境下修改完毕重启mysqld的过程中,一直启动失败,提示:

Starting MySQL.. ERROR! The server quit without updating PID file ......

这样的错误,网上搜了半天,发现自mysql 5起,设置慢查询日志的相关参数做了修改,新的参数如下:

slow-query-log=1 #开启慢查询

slow-query-log_file = /home/phpernote.com-slow.log #慢查询日志目录

long_query_time = 1 #记录下查询时间超过1秒

以上的做法需要重启mysql服务器,也可以不重启修改慢查询配置:

set global.slow_query_log=1

set global.slow_query_time=3

其他参数可通过以下命令查阅: show variables '%slow%';

还有一些其他的相关配置参数,这里也一并说明下:

#记录所有sql语句

log=E:/mysqllog/mysql.log

#记录数据库启动关闭信息,以及运行过程中产生的错误信息

log-error=E:/mysqllog/myerror.log

# 记录除select语句之外的所有sql语句到日志中,可以用来恢复数据文件

log-bin=E:/mysqllog/bin

另外也可以直接通过在mysql命令行的方式下设置相关参数,具体操作过程如下:

mysql> show variables like "%long%";         //查看一下默认为慢查询的时间10秒

+-----------------+-----------+

| Variable_name   | Value     |

+-----------------+-----------+

| long_query_time | 10.000000 |

+-----------------+-----------+

1 row in set (0.00 sec)

mysql> set global long_query_time=2;          //设置成2秒,加上global,下次进mysql已然生效

Query OK, 0 rows affected (0.00 sec)

mysql> show variables like "%slow%";          //查看一下慢查询是不是已经开启

+---------------------+---------------------------------+

| Variable_name       | Value                           |

+---------------------+---------------------------------+

| log_slow_queries    | OFF                             |

| slow_launch_time    | 2                               |

| slow_query_log      | OFF                             |

| slow_query_log_file | /usr/local/mysql/mysql-slow.log |

+---------------------+---------------------------------+

4 rows in set (0.00 sec)

mysql> set slow_query_log='ON';                        //加上global,不然会报错的。

ERROR 1229 (HY000): Variable 'slow_query_log' is a GLOBAL variable and should be set with SET GLOBAL

mysql> set global slow_query_log='ON';            //启用慢查询

Query OK, 0 rows affected (0.28 sec)

mysql> show variables like "%slow%";              //查看是否已经开启

+---------------------+---------------------------------+

| Variable_name       | Value                           |

+---------------------+---------------------------------+

| log_slow_queries    | ON                              |

| slow_launch_time    | 2                               |

| slow_query_log      | ON                              |

| slow_query_log_file | /usr/local/mysql/mysql-slow.log |

+---------------------+---------------------------------+

4 rows in set (0.00 sec)

(2)查看方式

Linux:

使用mysql自带命令mysqldumpslow查看

常用命令

-s ORDER what to sort by (t, at, l, al, r, ar etc), 'at’ is default

-t NUM just show the top n queries

-g PATTERN grep: only consider stmts that include this string

eg:

s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒序

-t,是top n的意思,即为返回前面多少条的数据

-g,后边可以写一个正则匹配模式,大小写不敏感的

具体命令使用如下:

mysqldumpslow -s c -t 20 host-slow.log

mysqldumpslow -s r -t 20 host-slow.log

上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。

mysqldumpslow -t 10 -s t -g “left join” host-slow.log这个是按照时间返回前10条里面含有左连接的sql语句。

Windows:

当你是第一次开启mysql的慢查询,会在你指定的目录下创建这个记录文件,本文就是mysqlslowquery.log,这个文件的内容大致如下(第一次开启MYSQL慢查询的情况下)

E:\web\mysql\bin\mysqld, Version: 5.4.3-beta-community-log (MySQL Community Server (GPL)). started with:

TCP Port: 3306, Named Pipe: (null)

Time Id Command Argument

可以通过如下的命令来查看慢查询的记录数:

mysql> show global status like '%slow%';

结果如下:

+---------------------+-------+

| Variable_name       | Value |

+---------------------+-------+

| Slow_launch_threads | 0     |

| Slow_queries        | 0     |

+---------------------+-------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值