1.查询日志、慢查询日志、二进制日志对比

查询日志

general_log

会记录用户的所有操作,其中包含增删查改等

可以指定输出为表

慢查询日志

slow_log

只要超过定义时间的所有操作语句都记录

可以指定输出为表

二进制日志

log_bin

记录可能执行更改的所有操作

mysqlbinlog查看

2.日志的分析

2.1日志的存储

数据操作过程中,Mysqld是将接收到的语句按照接收的顺序(注意不是执行顺序)写到查询日志文件中。一条一条就类似这样:

# Time: 070927 8:08:52

#User@Host: root[root] @ [192.168.0.20]

# Query_time: 372 Lock_time: 136 Rows_sent: 152 Rows_examined: 263630select id, name from manager where id in (66,10135);

这样的话,当我们去查看日志内容时就会灰常费时费神费眼睛。那么应该怎么破?

自5.1.6版本起,就有一波新功能出炉,比如查询日志可以写到数据库系统中的专用表。

MySQL的命令行在启动时可以加载很多参数,其中就提供了一个日志专用的参数--log-output,用来指定日志文件的输出方式.

--log-output参数可选值有三个:

TABLE:记录到数据库中的日志表;

FILE:记录到日志文件,默认值即为FILE (在5.1.6到5.1.20版本时,默认值为TABLE);

NONE:不记录。

(1)可以是TABLE、FILE、NONE,也可以是TABLE及FILE的组合(用逗号隔开),默认为TABLE。

(2)如果组合中出现了NONE,那么其它设定都将失效,同时,无论是否启用日志功能,也不会记录任何相关的日志信息。

(3)作用范围为全局级别,可用于配置文件,属动态变量。

(4)启用mysqld进程时附加--log-output指定日志输出类型。

MySQL支持将慢查询日志保存到mysql.slow_log这张表中:

2.2慢查询分析工具

如果慢查询日志输出类型已经指定了FILE,在日志量大的情况下,我们可以借助一些分析工具。

(1)mysqldumpslow

mysql 自带慢查询日志分析工具 mysqldumpslow,使用很简单,可以跟-help来查看具体的用法。

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

(2)mysqlsla

功能非常强大. 数据报表,非常有利于分析慢查询的原因, 包括执行频率, 数据量, 查询消耗等.

格式说明如下:

总查询次数 (queries total), 去重后的sql数量 (unique)输出报表的内容排序(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语句。

除了以上的输出, 官方还提供了很多定制化参数, 是一款不可多得的好工具。

(3)pt-upgrade

这个工具用来检查在新版本中运行的SQL是否与老版本一样,返回相同的结果,最好的应用场景就是数据迁移的时候。

pt-upgrade h=host1 h=host2 slow.log

(4)pt-query-digest

可以从普通MySQL日志,慢查询日志以及二进制日志中分析查询,甚至可以从SHOW PROCESSLIST和MySQL协议的tcpdump中进行分析,如果没有指定文件,它从标准输入流(STDIN)中读取数据。

最简单的用法如下:

pt-query-digest slow.logs

整个输出分为三大部分:

1、整体概要(Overall)

这个部分是一个大致的概要信息(类似loadrunner给出的概要信息),通过它可以对当前MySQL的查询性能做一个初步的评估,比如各个指标的最大 值(max),平均值(min),95%分布值,中位数(median),标准偏差(stddev)。这些指标有查询的执行时间(Exec time),锁占用的时间(Lock time),MySQL执行器需要检查的行数(Rows examine),最后返回给客户端的行数(Rows sent),查询的大小。

2、查询的汇总信息(Profile)

这个部分对所有”重要”的查询(通常是比较慢的查询)做了个一览表:

每个查询都有一个Query ID,这个ID通过Hash计算出来的。pt-query-digest是根据这个所谓的Fingerprint来group by的。举例下面两个查询的Fingerprint是一样的都是select * from table1 where column1 = ?,工具箱中也有一个与之相关的工具pt-fingerprint。

select * from table1 where column1 = 2

select * from table1 where column1 = 3

Rank整个分析中该“语句”的排名,一般也就是性能最常的。

Response time  “语句”的响应时间以及整体占比情况。

Calls 该“语句”的执行次数。

R/Call 每次执行的平均响应时间。

V/M 响应时间的差异平均对比率。

在尾部有一行输出,显示了其他2个占比较低而不值得单独显示的查询的统计数据。

3、详细信息

这个部分会列出Profile表中每个查询的详细信息:

包括Overall中有的信息、查询响应时间的分布情况以及该查询”入榜”的理由。

2.3BOX Anemometer

BOX Anemometer是基于pt-query-digest将MySQL慢查询可视化

分析mysql日志文件_MySQL日志文件与分析相关推荐

  1. 分析mysql慢查询_mysql慢查询的分析方法_MySQL

    本文主要介绍的是MySQL慢查询分析方法,前一段日子,我曾经设置了一次记录在MySQL数据库中对慢于1秒钟的SQL语句进行查询.想起来有几个十分设置的方法,有几个参数的名称死活回忆不起来了,于是重新整 ...

  2. mysql 日志文件_Mysql 日志文件类型

    简介: Mysql 中提供了多种类型的日志文件,分别反映 Mysql 的不同信息,了解它们很有必要. 1.Error log ( 错误日志 ) 错误日志记录了 Mysql Server 运行过程中所有 ...

  3. arch mysql日志位置_MySQL 日志文件与相关参数

    1 .参数文件及mysql参数 查看mysql 的 my.cnf 配置文件位置命令:>./bin/mysql --help | grep my.cnf 查看mysql 的参数设置命令: mysq ...

  4. mysql -h 日志打印_mysql日志

    mysql日志 查看mysql版本 1. select version(); 2. status; 1.错误日志 错误日志文件位置:如果在配置文件中没有指定,则文件名为hostname.err 可通过 ...

  5. mysql ibdata作用_mysql data文件夹下ibdata1 文件作用

    ibdata1这个文件超级大, 查了一下, 大概的作用如下 是储存的格式 INNODB类型数据状态下, ibdata用来储存文件的数据 而库名的文件夹里面的那些表文件只是结构而已 由于mysql4.1 ...

  6. mysql表只有frm文件_MYSQL数据文件--.frm文件(只有.frm文件时的表结构恢复)

    了解MYSQL的都知道,在MYSQL中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm文件,.frm文件是用来保存每个数据表的元数据(meta)信息,包括表结构的定义等,.frm ...

  7. mysql 活跃事务_MySQL日志与事务

    整体架构 事务的基本概念 事务就是一组原子性的sql查询,或者是一个独立的工作单元 事务内的语句,要么全部执行成功,要么全部执行失败 ACID标识原子性(atomicity).一致性(consiste ...

  8. mysql重做日志与binlog日志区别_MySQL日志之binlog、redo log、undo log

    1. binlog(二进制日志) 1.1 binlog介绍 binlog记录了对数据库执行更改的所有操作(不包括查询),还包括了执行数据库更改操作的时间和执行时间等信息.binlog主要有两个作用:恢 ...

  9. mysql数据库熟悉表空间数据文件_MySQL数据文件介绍及存放位置

    MySQL的每个数据库都对应存放在一个与数据库同名的文件夹中,MySQL数据库文件包括MySQL所建数据库文件和MySQL所用存储引擎创建的数据库文件. 1.MySQL创建并管理的数据库文件: .fr ...

最新文章

  1. ZwQueryVirtualMemory暴力枚举进程模块
  2. python开发面试题目_Python测试开发面试笔试题
  3. jedis常用API
  4. Customer Material Info in CRM and C4C
  5. FLV audio tag
  6. 央视被黑内幕,居然存在暴库及上传漏洞
  7. 用一个小的例子来说明为什么TCP采用三次握手才能保证连接成功
  8. SQL SERVER日期函数详细用法
  9. C#与Javascript变量、函数之间的相互调用
  10. [推荐书籍]Flex 4 in Action MEAP Edition
  11. 《UNIX网络编程 卷1:套接字联网API(第3版)》——2.13 常见因特网应用的协议使用...
  12. adobe acrobat pro字体很怪,有点发虚,不整齐,调整方法
  13. 饿了么UI框架表单验证
  14. 编写java程序计算梯形面积_学习练习 java面向对象梯形面积
  15. 飞机大战源码php,飞机大战源码 - 丁小未的个人页面 - OSCHINA - 中文开源技术交流社区...
  16. 牛年交个朋友,重新认识一下云和恩墨!
  17. 武汉大花岭科目二考试说明
  18. 威尔科克森(Wilcoxon)符号秩检验:定义,运行方式
  19. 浅谈道路交通事故车辆安全技术鉴定
  20. Java定义一个点日期MyDate,包含三个成员变量year、month、day 表示年、月、日,每个属性对应get和set方法,最后printDate()方法,按照“yyy~mm~dd”的形式输出

热门文章

  1. java标志清理_JVM内存管理之GC算法精解(五分钟让你彻底明白标记/清除算法)...
  2. 弹出窗口显示输出内容_前端加油站(3)-JavaScript 输出
  3. Redis复制的高可用详解
  4. Win2003和Win2008防火墙导致FTP服务器不能访问的解决方法
  5. 关于.framework 文件过大 移除包内对i386 x86_64 的支持
  6. 消息队列如何保证顺序性?
  7. 第十届蓝桥杯(含题目文件下载)
  8. js this pointer 指针
  9. javascript-----DOM文档对象模型
  10. Location和Content-Location