首页 > 代码库 > mysql慢查询和php-fpm慢日志

mysql慢查询和php-fpm慢日志

MySQL慢查询

    在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间 比较长的SQL语句找出呢?MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!

 

PHP-FPM慢日志

    php-fpm慢日志slowlog设置可以让开发者很好的查找哪些php进程速度过慢而导致的网站问题,让开发者方便的找到问题的所在。该方法同样适用于排查nginx的500、502问题根源,当nginx收到如上错误码时,可以确定后端php-fpm解析php出了某种问题,比如,执行错误,执行超时。

 

MySQL慢查询的不足

    1.MySQL5.0版本, long_query_time时间粒度不够细,最小值为1秒。对于高并发性能的网页脚本而言,1秒出现的意义不大。即出现1秒的查询比较少。直到mysql5.1.21才提供更细粒度的long_query_time设定.

    2.不能将服务器执行的所有查询记录到慢速日志中。虽然MySQL普通日志记录了所有查询,但是它们是解析查询之前就记录下来了。这意味着普通日志没办法包含诸如执行时间,锁表时间,检查行数等信息。

    3.如果开启了log_queries_not_using_indexes选项,slow query日志会充满过多的垃圾日志记录,这些快且高效的全表扫描查询(表小)会冲掉真正有用的slow queries记录。比如select * from category这样的查询也会被记录下来。

 

1、如何开启慢查询?  

    首先我们先查看MYSQL服务器的慢查询状态是否开启.

      mysql>show variables like ‘%quer%‘;

    开启慢查询非常简单, 操作如下:

    方法一

      vi  /etc/my.cnf       注:my.cnf是mysql的配置文件

      在mysqld下方加入慢查询的配置语句(一定要在[mysqld]的下方加入

        [mysqld]

            log-slow-queries = /var/lib/mysql/mysql-slow.log

            long_query_time = 1

        保存退出   重启mysql

    log-slow-queries : 代表MYSQL慢查询的日志存储目录, 此目录文件一定要有写权限。

    long_query_time: sql最长执行时间。

    方法二

      在mysql命令行下执行如下操作:

        set global slow_query_log=ON;

          技术分享

        set global long_query_time=1;

          技术分享

  测试

    1、查看生成的慢日志记录   此时是空的没有记录

      cat mysql-slow.log 

        技术分享

    2、执行一条超过设置时间的sql语句 在查看是否被记录

      如:select sleep(1);     再去查看慢日子记录

         技术分享

    到此mysql慢查询就OK了。

2、 如何开启php-fpm慢日志?

    php-fpm.conf的配置文件中有一个参数request_slowlog_timeout是这样描述的:

        技术分享

    当request_slowlog_timeout 设为一个具体秒时request_slowlog_timeout =5,表示如果哪个脚本执行时间大于5秒,会记录这个脚本到慢日志文件中

request_slowlog_timeout =0表示关闭慢日志输出。

    慢日志文件位置默认在php的安装目录下的log文件夹中,可以通过修改slowlog = log/$pool.log.slow参数来指定。

    php-fpm慢日志的例子,慢日志会记录下进程号,脚本名称,具体哪个文件哪行代码的哪个函数执行时间过长。

    request_slowlog_timeout 和 slowlog需要同时设置,开启request_slowlog_timeout的同时需要开启 slowlog

    慢日志路径需要手动创建 (slowlog)

    具体开启步骤如下:

      技术分享

结束。

mysql慢查询和php-fpm慢日志