数据库慢查询监控配置

Posted 七月的小尾巴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库慢查询监控配置相关的知识,希望对你有一定的参考价值。

MySql慢查询方法介绍

mysql 慢查询可以分析 MySql 语句查询性能问题的时候,可以再 MySql 记录中查询超过指标时间的语句,我们将超过指标时间的 SQL 语句称为 “慢查询”。MySql 自带的慢查询分析工具 mysqldumpslow 可以对慢查询日志进行分析;主要功能是统计sql的执行信息,其中包括:

  1. 出现次数(count)
  2. 执行最长时间(time)
  3. 累计总耗费时间(Time)
  4. 等待锁的时间(Lock)
  5. 发送给客户端的行总数(Rows)
  6. 扫描的行总数(Rows)

开启mysql配置

  • 在部署的mysql服务器中,配置mysql配置文件, vi etc/my.cnf ,然后在文件中添加

    # 为 1 则表示开启慢查询(记得注释不要加到配置文件中)
    slow_query_log=1
    # 0.1则表示100ms,通常生产环境配置的都是0.1
    long_query_time=0.1
    

    注: 配置完成后,重新 mysql 服务配置才能生效,默认情况下,慢查询日志生成在 /var/lib/mysql 目录下,日志名称为{hostname}_slow-query.log

    // 执行如下命令重启mysql
    systemctl restart mysqld
    

    配置成功之后,我们在重新进入mysql

    慢查询开启与关闭

我们配置成功之后,连接数据库查询日志是否开启,输入如下命令校验:

show variables like '%slow_query_log%';


慢查询日志分析

在/usr/bin目录下,使用mysql自带命令 mysqldumpslow
常用的参数:

  • -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 

上述命令分别可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。 mysqldumpslow -t 10 -s t -g “left join” host-slow.log这个是按照时间返回前10条里面含有左连接的sql语句。

图例中的命令:mysqldumpslow –s at -t 50 host-slow.log 显示出耗时最长的50个

SQL语句的执行信息

以Count: 32 Time=0.26s (8s) Lock=0.00s (0s) Rows=10.0 (320),wos_20120719[wos_20120719]@2host 为例:

Count: 32 该SQL总共执行32次
Time = 0.26s (8s) 平均每次执行该SQL耗时0.26秒,总共耗时32(次)*0.26(秒)=8秒。
Lock=0.00s(0s) lock时间0秒 Rows =10.0(320) 每次执行SQL影响数据库表中的10行记录,总共影响 10(行)*32(次)=320行记录

以上是关于数据库慢查询监控配置的主要内容,如果未能解决你的问题,请参考以下文章

MySQL监控

监控Mongo慢查询

java中,生产环境服务器变慢,如何诊断处理?

数据库监控&性能优化

Django - 追踪在数据库中生成慢查询的代码

Prometheus配置文件