最近服务维护的公司的DB服务器,总是会出现问题,感觉需要优化一下了,登陆上去,发现慢查询日志都没有开,真是惭愧, 故果断加上慢查询日志, 经过分析sql记录,发现问题很多,开发人员很多没有对sql优化,由于现在业务量较少,而且服务器性能配置较高,所以看不出问题。

加 上慢查询日志好后,瞬间日志暴增,讲过分析,其中80%的sql没有用到索引,执行较慢的sql及小于3秒的,没有出现,瞬间对网上好多人说,mysql 优化索引为王甚为感慨,可能你会感觉到,为什么哪里的面试都会牵涉到mysql索引优化的问题, sql优化从研发开始,如果研发团队不重视代码质量还没 有一个好的开发框架来约束开发者随意编写未经认证的sql语句,是多么的恐怖。

不扯淡了,回到正题,普及一下mysql满查询日志的操作及分析方法:

    1. 参数的意义

      log-slow-queries <slow_query_log_file>
      存放slow query日志的文件。你必须保证mysql server进程mysqld_safe进程用户对该文件有w权限。

      long_query_time

      果query time超过了该值,则认为是较慢查询,并被记录下来。单位是秒,最小值是1,默认值是10秒。10秒对于大多数应用来讲,太长了。我们推
      荐从3秒开始, 依次减少,每次都找出最”昂贵”的10条SQL语句并且优化他们。日复一日,一步一步优化。一次性找出很多条SQL语句,对于优化来讲,
      意义并不大。

      log-queries-not-using-indexes
       MySQL会将没有使用索引的查询记录到slow query日志中。无论它执行有多快,查询语句没有使用索引,都会被记录。有的时候,有些没有使用引索的查询非常快(例如扫描很小的表),但也有可能导致服务器变慢,甚至还会使用大量的磁盘空间。

      log-slow-admin-statements
      一些管理指令,也会被记录。比如OPTIMEZE TABLE, ALTER TABLE等等。

    2. 开启慢查询

      方法一:在服务器上找到mysql的配置文件my.cnf , 然后再mysqld模块里追加一下内容

      1
      2
      3
      4
      5
      log_slow_queries = NO
      log-slow-queries = /var/run/mysqld/slow_querys.log
      long_query_time = 3
      log-queries-not-using-indexes
      log-slow-admin-statements

      然后重启mysql服务器即可,这是通过一下命令看一下慢查询日志的情况:

      1
      tail -f /var/run/mysqld/slow_querys.log

      方法二:通过修改myssql的全局变量来处理,这样做的好处是,不用重启mysql服务器,登陆到mysql上执行一下sql脚本即可

      1
      2
      set global slow_query_log=ON;
      set global long_query_time=3;

      然后通过一下命令查看是否成功

      1
      2
      3
      4
      5
      6
      7
      mysql> show variables like 'long%';
      +-----------------+-----------+
      | Variable_name   | Value     |
      +-----------------+-----------+
      | long_query_time | 10.000000 |
      +-----------------+-----------+
      1 row in set (0.00 sec)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      mysql> show variables like 'slow%';
      +---------------------+---------------+
      | Variable_name       | Value         |
      +---------------------+---------------+
      | slow_launch_time    | 2             |
      | slow_query_log      | ON            |
      | slow_query_log_file | /tmp/slow.log |
      +---------------------+---------------+
      3 rows in set (0.00 sec)
    3. 分析慢查询日志

      方法一:通过查看mysql的慢查询日志分析,比如我们可以tail -f  slow_query.log查看里面的内容,字段意义

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      # Time: 110107 16:22:11
      # User@Host: root[root] @ localhost []
      # Query_time: 9.869362 Lock_time: 0.000035 Rows_sent: 1 Rows_examined: 6261774
      SET timestamp=1294388531;
      select count(*) from ep_friends;
      第一行,SQL查询执行的时间
      第二行,执行SQL查询的连接信息
      第三行记录了一些我们比较有用的信息
      Query_time SQL执行的时间,越长则越慢
      Lock_time 在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间
      Rows_sent 查询返回的行数
      Rows_examined 查询检查的行数

      方法二:使用mysqldumpslow命令分析,例如

      1
      mysqldumpslow -s c -t 10 /tmp/slow-log

      这会输出记录次数最多的10条SQL语句,其中:

      -s, 是表示按照何种方式排序,c、t、l、r分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒叙; -t, 是top n的意思,即为返回前面多少条的数据; -g, 后边可以写一个正则匹配模式,大小写不敏感的;

      比如
      /path/mysqldumpslow -s r -t 10 /tmp/slow-log
      得到返回记录集最多的10个查询。
      /path/mysqldumpslow -s t -t 10 -g “left join” /tmp/slow-log
      得到按照时间排序的前10条里面含有左连接的查询语句。

    4. 慢查询日志的不足

      虽然记录了slow query能够帮助你优化产品。但是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这样的查询也会被记录下来。开启了
      log_queries_not_using_indexes选项,slow query日志会充满过多的垃圾日志记录,这些快且高效的全表扫描查询(表
      小)会冲掉真正有用的slow queries记录。比如select * from category这样的查询也会被记录下来。

mysql慢查询开启及分析方法的更多相关文章

  1. mysql服务器查询慢原因分析方法

    mysql数据库在查询的时候会出现查询结果很慢,超过1秒,项目中需要找出执行慢的sql进行优化,应该怎么找呢,mysql数据库提供了一个很好的方法,如下: mysql5.0以上的版本可以支持将执行比较 ...

  2. MySQL慢查询开启、日志分析(转)

    说明 Mysql的查询讯日志是Mysql提供的一种日志记录,它用来记录在Mysql中响应时间超过阈值的语句 具体指运行时间超过long_query_time值得SQL,则会被记录到慢查询日志中.lon ...

  3. mysql 慢查询开启

    相关博客: linux下开启mysql慢查询,分析查询语句 开启方法: 方法一:使用命令开启慢查询开启 mysql> show variables like "%long%" ...

  4. MySQL慢查询 - 开启慢查询

    一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.参数说明 slow_query_log 慢查询开启状态 slow_ ...

  5. MySQL慢查询—开启慢查询

    ###一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. ###二.参数说明 slow_query_log 慢查询开启状态 ...

  6. mysql导出查询结果到csv方法

    要将MySQL的查询结果导出为csv,一般会使用php连接mysql执行查询,将返回的查询结果使用php生成csv格式再导出. 但这样比较麻烦,需要服务器安装php才可以实现. 直接使用mysql导出 ...

  7. mysql随机查询记录的高效率方法

    mysql使用rand随机查询记录的高效率方法 一直以为mysql随机查询几条数据,就用 SELECT * FROM `table` ORDER BY RAND() LIMIT 5 就可以了. 但是真 ...

  8. Mysql慢查询开启和查看 ,存储过程批量插入1000万条记录进行慢查询测试

    首先登陆进入Mysql命令行  执行sql      show variables like 'slow_query%';  结果为OFF 说明还未开启慢查询 执行sql     show varia ...

  9. MySQL慢查询Explain Plan分析

    Explain Plan 执行计划,包含了一个SELECT(后续版本支持UPDATE等语句)的执行 主要字段 id 编号,从1开始,执行的时候从大到小,相同编号从上到下依次执行. Select_typ ...

随机推荐

  1. What is Network Address Translation?---reference

    http://whatismyipaddress.com/nat What is Network Address Translation? Network Address Translation (N ...

  2. hadoop 天气案例

    对下面一组气温数据进行处理,得到每个月份最高的两个气温值 2018-12-12 14:30 25c2018-12-12 15:30 26c2017-12-12 12:30 36c2019-01-01 ...

  3. C#委托的好处

    C#委托的好处 先来看一个例子: 某人有三子,让他们各自带一样东西出门,并带回一头猎物. 可以理解为一种父亲对儿子的委托: 猎物  办法(工具 某工具) 三个人执行委托的方法各不相同 兔子 打猎(工具 ...

  4. 初识rbac

    一.权限组件 1.项目与应用 一个项目可以有多个应用:一个应用可以在多个项目下:前提:应用是组件. 2.什么是权限? 一个包含正则表达式的url就是一个权限. 可以理解为如下方程式: who what ...

  5. ECMAScript 6简介

    一.起步 1.扎实的HTML/CSS/Javascript基本功,这是前置条件. 2.不要用任何的构建项目工具,只用最简单的<script>,把教程里的例子模仿一遍,理解用法.不推荐上来就 ...

  6. css3总结之居中

    居中在前端布局上很常见,也很常用,也是最基本的技巧.居中效果在方向控制上基本可以分解成水平居中,垂直居中和水平垂直居中. 针对调整的元素不同,具体的处理方式上有些差异.这里我们先不讲绝对定位下的居中, ...

  7. boost库的配置——Linux篇

    Boost库分为两个部分来使用,一是直接使用对应的头文件,二是需要编译安装相应的库才可以使用. 下面是boost在Linux上安装和使用过程(整个boost库全部安装): (1)在www.boost. ...

  8. IntelliJ、ReSharper 6折 加入慧都“惊喜惠”

    慧都2013岁末回馈惊喜不断!著名的软件开发公司JetBrains旗下所有产品加入"惊喜惠"活动环节, JAVA IDE——IntelliJ IDEA,.NET效率工具集——ReS ...

  9. Windows7中Java64位环境变量配置:javac不是内部命令或外部命令,也不是可运行的程序或批处理文件。

    按照默认设置安装完JDK(Java Developement Kits)后,一般默认路径为:C:\Program Files\Java\jdk1.8.0_05_x64\文件夹. 然后配置环境变量:&q ...

  10. java面试题之----String的intern

    When---什么时候需要了解String的intern方法: 面试的时候(蜜汁尴尬)!虽然不想承认,不过面试的时候经常碰到这种高逼格的问题来考察我们是否真正理解了String的不可变性.String ...