如何记录mysql慢查询sql日志

配置开启

在mysql配置文件my.cnf中增加

log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log)
long_query_time=2 (记录超过的时间,默认为10s)
log-queries-not-using-indexes (log下来没有使用索引的query,可以根据情况决定是否开启)
log-long-format (如果设置了,所有没有使用索引的查询也将被记录)

实例:
[mysqld]
long_query_time = 1
log-slow-queries = /usr/local/mysql5.0.40/var/slow_query.log
log-queries-not-using-indexes = true

"too many connections"找不到问题所在,后来发现打开mysql的慢查询会有很大的帮助就搞了一个.

打开MySQL慢查询
MySQL慢查询记录日志对于跟踪PHP+MySQL体系下的MySQL负载调优问题很有用处,比如安装了很多Discuz!插件的用户,这样可以大概排查出那些插件有代码问题。其实启用MySQL的慢查询日志很简单,只需要在MySQL的配置文件里添加log-slow-queries和long_query_time两个参数即可。

今天有个朋友问我,就顺带记录上来。更多的MySQL优化信息可以查看这里:http://www.ccvita.com/category/mysql

Windows下开启MySQL慢查询
MySQL在Windows系统中的配置文件一般是是my.ini找到[mysqld]下面加上
log-slow-queries = F:\MySQL\log\mysqlslowquery.log
long_query_time = 2

Linux下启用MySQL慢查询
MySQL在Windows系统中的配置文件一般是是my.cnf找到[mysqld]下面加上
log-slow-queries=/data/mysqldata/slowquery.log
long_query_time=2

注意
log-slow-queries = F:\MySQL\log\mysqlslowquery.log为查询日志存放的位置,一般这个目录要有MySQL的运行帐号的可写权限,一般都将这个目录设置为MySQL的数据存放目录;
long_query_time=2中的2表示查询超过两秒才记录;

启用 slow log

有两种启用方式:

1, 在my.cnf 里 通过 log-slow-queries[=file_name]

2, 在mysqld进程启动时,指定--log-slow-queries[=file_name]选项

比较的五款常用工具

mysqldumpslow, mysqlsla, myprofi, mysql-explain-slow-log, mysqllogfilter

mysqldumpslow, mysql官方提供的慢查询日志分析工具. 输出图表如下

主要功能是, 统计不同慢sql的
出现次数(Count), 
执行最长时间(Time), 
累计总耗费时间(Time), 
等待锁的时间(Lock), 
发送给客户端的行总数(Rows), 
扫描的行总数(Rows), 
用户以及sql语句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示).

分析日志 – mysqldumpslow
分析日志,可用mysql提供的mysqldumpslow,使用很简单,参数可–help查看

# -s:排序方式。c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序;#                             ac , at , al , ar 表示相应的倒叙;# -t:返回前面多少条的数据;# -g:包含什么,大小写不敏感的;
mysqldumpslow -s r -t 10/slowquery.log#slow记录最多的10个语句
mysqldumpslow -s t -t 10-g "left join"/slowquery.log#按照时间排序前10中含有"left join"的

mysqlsla, hackmysql.com推出的一款日志分析工具(该网站还维护了 mysqlreport, mysqlidxchk 等比较实用的mysql工具)
**************************************************************************************************************
http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
安装时遇到的问题以及解决办法:
[root@280506 FCGI-0.74]# perl Makefile.Pl

Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl                                                                             5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_pe                                                                             rl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.   
编译FCGI的时候报错.google了下,找到答案,只有安装

yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker就可以了

**************************************************************************************************************
一、使用
mysqlsla -lt slow mysql-slow.log 
或者 
mysqlsla -lt slow mysql-slow.log -sf "+SELECT" -db dbName -top 10 -sort t_sum

参数意义 
lt:表示日志类型,有slow, general, binary, msl, udl。 
sf:[+-][TYPE],[TYPE]有SELECT, CREATE, DROP, UPDATE, INSERT,例如”+SELECT,INSERT”,不出现的默认是-,即不包括。 
db:要处理哪个库的日志。 
top:表示取按规则排序的前多少条。 
sort:按某种规则排序,t_sum按总时间排序, c_sum按总次数排序。

整体来说, 功能非常强大. 数据报表,非常有利于分析慢查询的原因, 包括执行频率, 数据量, 查询消耗等.
【说明】
queries total: 总查询次数 unique:去重后的sql数量
sorted by : 输出报表的内容排序
最重大的慢sql统计信息, 包括 平均执行时间, 等待锁时间, 结果行的总数, 扫描的行总数.
Count, sql的执行次数及占总的slow log数量的百分比.
Time, 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比.
95% of Time, 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间.
Lock Time, 等待锁的时间.
95% of Lock , 95%的慢sql等待锁时间.
Rows sent, 结果行统计数量, 包括平均, 最小, 最大数量.
Rows examined, 扫描的行数量.
Database, 属于哪个数据库
Users, 哪个用户,IP, 占到所有用户执行的sql百分比
Query abstract, 抽象后的sql语句
Query sample, sql语句

除了以上的输出, 官方还提供了很多定制化参数, 是一款不可多得的好工具.
mysql-explain-slow-log, 德国人写的一个perl脚本.
http://www.willamowius.de/mysql-tools.html

功能上有点瑕疵, 不仅把所有的 slow log 打印到屏幕上, 而且统计也只有数量而已. 不推荐使用.
mysql-log-filter, google code上找到的一个分析工具.提供了 python 和 php 两种可执行的脚本.
http://code.google.com/p/mysql-log-filter/

功能上比官方的mysqldumpslow, 多了查询时间的统计信息(平均,最大, 累计), 其他功能都与 mysqldumpslow类似.
特色功能除了统计信息外, 还针对输出内容做了排版和格式化, 保证整体输出的简洁. 喜欢简洁报表的朋友, 推荐使用一下.

myprofi, 纯php写的一个开源分析工具.项目在 sourceforge 上.
http://myprofi.sourceforge.net/

功能上, 列出了总的慢查询次数和类型, 去重后的sql语句, 执行次数及其占总的slow log数量的百分比.
从整体输出样式来看, 比mysql-log-filter还要简洁. 省去了很多不必要的内容. 对于只想看sql语句及执行次数的用户来说, 比较推荐.

总结

工具/功能 一般统计信息 高级统计信息 脚本 优势
mysqldumpslow 支持 不支持 perl mysql官方自带
mysqlsla 支持 支持 perl 功能强大,数据报表齐全,定制化能力强.
mysql-explain-slow-log 支持 不支持 perl
mysql-log-filter 支持 部分支持 python or php 不失功能的前提下,保持输出简洁
myprofi 支持 不支持 php 非常精简

转载于:https://blog.51cto.com/shitouququ/1241226

Mysql 慢查询和慢查询日志分析相关推荐

  1. shell脚本:Dos 攻击防范、系统发送告警、MySQL 数据库备份单、MySQL 数据库备份多、Nginx 日志分析、网卡实时流量、服务器磁盘利用率

    系统配置初始化脚本 #/bin/bash # 设置时区并同步时间 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime if ! crontab ...

  2. mysql查看、开启慢查询、分析执行SQL的效率

    一.启用慢SQL 开启慢SQL的配置参数 slow_query_log: 该参数表示是否开启慢SQL查询日志.在mysql中,我们可以通过以下命令来查看和修改该变量的状态 1.show variabl ...

  3. 走向云计算之Hadoop实际应用网站日志分析

    一.概述 网站日志分析是Hadoop应用的一个方向.那么什么是网站日志呢? 网站日志是记录web服务器接收处理请求以及运行时错误等各种原始信息的以.log结尾文件.通过网站日志可以清楚的得知用户在什么 ...

  4. ESXi日志分析网站第五版v5.4

    ESXi日志分析网站第五版v5.4 https://mp.weixin.qq.com/s/mz3OVG7vw_wjUtSzFApBpQ 第5.4版更新 支持ESXI7.0版本及以上日志分析 常规性安全 ...

  5. MySQL慢查询日志分析(二)

    1: 为什么在慢查询日志里面出现Query_time小于long_query_time阀值的SQL语句呢? 例如,long_query_time=5, 但是Query_time小于1秒的SQL都记录到 ...

  6. MySQL慢查询日志分析(一)

    慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志 ...

  7. MySQL 慢查询日志分析及可视化结果

    MySQL 慢查询日志分析及可视化结果 MySQL 慢查询日志分析 pt-query-digest分析慢查询日志 pt-query-digest --report slow.log 报告最近半个小时的 ...

  8. MySQL 通用查询日志和慢查询日志分析

    MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...

  9. MySQL数据库:通用查询日志和慢查询日志分析

    MySQL中的日志包括:通用查询日志.慢查询日志.错误日志.二进制日志等等.这里主要记录一下两种比较常用的日志:通用查询日志和慢查询日志. (1)通用查询日志:记录建立的客户端连接和执行的语句. (2 ...

  10. mysql慢查询日志分析工具比较_MySQL慢查询日志总结 日志分析工具mysqldumpslow

    慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志 ...

最新文章

  1. Linux内核网络栈1.2.13-af_inet.c概述
  2. topcoder srm 635 div1
  3. 云将与行业走向深度融合
  4. 常见算法详解(原理及代码实现Python版本)
  5. JdbcTemplate(概念和准备)
  6. 漫步线性代数二十三——行列式公式
  7. 【转】android内存溢出的解决方法
  8. 网站服务器、VPS和虚拟主机的联系与区别
  9. 命令dd 及简单应用
  10. NOIP2018 复赛提高组一等奖获奖名单
  11. 如何一键批量上传图片到指定图床,并返回 Markdown 链接?
  12. 手机进水声音变小怎么办
  13. 极简式TAVR左心室导丝起搏步骤和注意事项
  14. “failed to update unity web player”失败的问题:
  15. 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联
  16. 破解所谓的ISP封路由的方法大集合
  17. 我喜欢你是寂静的--聂鲁达
  18. unittest框架以及原理介绍
  19. fft变换之后的实际意义
  20. 41 linux标准输入设备之矩阵键盘驱动的实现

热门文章

  1. nodejs小问题:express不是内部或外部命令
  2. 通过bindservice方式调用服务方法里面的过程
  3. select支持手动输入
  4. centos Install Docker
  5. 鸟哥-服务器 学习笔记
  6. 利用common-fileupload组件实现java上传下载
  7. ubuntu 10.04 下驱动程序的hello word
  8. 9.7英寸 IPS 屏平板 选购
  9. P1164 小A点菜(动态规划背包问题)
  10. java实现微信支付