zoukankan      html  css  js  c++  java
  • 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)

        具体开启步骤如下:

          

    结束。

  • 相关阅读:
    基于视网膜虹膜识别的内容分级系统
    C# 反射详解一
    C# 委托浅析
    .Net Core中使用Dapper构建泛型仓储
    C# 泛型详解
    非对称可逆加密RSA
    对称可逆加密Des
    .NET Core 3.0 中间件 Middleware
    .NET Core3.0 日志 logging
    .Net Core3.0依赖注入DI
  • 原文地址:https://www.cnblogs.com/dcrq/p/5829145.html
Copyright © 2011-2022 走看看