mysql慢查询和php-fpm慢日志

Posted 进化史

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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慢日志的主要内容,如果未能解决你的问题,请参考以下文章

php-fpm的一次慢执行日志slow log

如何动态开启mysql的慢查询日志记录

如何开启MySQL慢查询日志

mysql怎么开启慢查询日志开启

如何开启MySQL慢查询日志

如何开启MySQL慢查询日志