学会读懂 MySql 的慢查询日志
今天我们来看一下怎样去读懂这些慢查询日志。
在跟踪慢查询日志之前。首先你得保证最少发生过一次慢查询。假设你没有能够自己制造一个:
root@server# mysql -e 'SELECT SLEEP(8);
上述操作所做的事情仅仅有一个:"睡"(啥也不做)八秒。这个长度应该足以被记录在你的慢查询日志里了(我通常推荐针对长于 2 或 3 秒的查询进行慢查询记录)。
首先,我们看看一个慢速查询日志条目是什么样子的:
root@server# tail /var/log/slowqueries
# Time: 130320 7:30:26
# User@Host: db_user[db_database] @ localhost []
# Query_time: 4.545309 Lock_time: 0.000069 Rows_sent: 219 Rows_examined: 254
SET timestamp=1363779026;
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';
我们来过一下每一行所代表的意思:
- 第一行表示记录日志时的时间。其格式是 YYMMDD H:M:S。我们能够看出上面的查询记录于 2013 年 3 月 20 日上午 7:30 - 注意:这个是server时间,可能跟你本地时间有所不同
- 然后,我们能够看到 MySql 用户、server以及主机名
- 第三行表示总的查询时间、锁定时间、"发送"或者返回的行数、查询过程中所检查的行数
- 接下来我们看到的是 SET timestamp=UNIXTIME; 这是查询实际发生的时间。假设你想找如今的一些慢查询。通过检查这个就不会发生你所检查的是几个月之前所发生的慢查询了。下边我会介绍怎样将其变成一个实用的时间
- 最后一行显示完整的查询语句
要将 Unix 时间转成一个人类可读的时间,能够使用 date -d 命令。
输入 date -d @(记得要包含 @ 符号),然后在 @(之间没有空格)后粘贴日志中的时间戳:
root@server# date -d @1363779026
Wed Mar 20 07:30:26 EDT 2013
上面样例中我们能够看到查询进行的同一时候记录了该日志 - 可是对于一台超负载的server经常并不是如此。
因此记住:SET timestamp= value 才是实际的查询的执行时间。
如今我来演示一下我是怎样使用 MySql 慢查询日志来解决我的某个站点上的一个真实问题的。
你的查询可能与此不太一样,可是解决这个问题的原理是相通的。
我在一个博客站点上使用了一个名为 Tweet Blender 的插件来自己主动显示相关微博到我的keyword中。不幸的是,一些人发现了这个并使用我的微博中的keyword来发一些垃圾微博 - 无论怎样,终于结果就是我的博客站点上显示的是一些垃圾微博。
由于相关微博在我的站点存在的时间并不长,所以我在站点上并没有发现什么问题。直到我查看慢查询日志。
我的站点对带有垃圾信息(垃圾信息经常都是一样的)的微博进行了几个相似的查询,经过一段时间后这些查询的数量太大以致当中的一些执行迟缓。
当这样的情况发生的时候,由于请求的数量非常大,有些朋友的站点非常可能会因此假死或者直接报错。可是我的server经过非常好的性能调优,因此并没有非常明显的影响。幸运的是当时我正在进行慢查询日志查看。及时发现了这一情况并迅速攻克了这个问题。
这个问题的解决非常easy - Tweet Blender 具备一个美丽的过滤功能。我仅仅需将该微博username以及一些垃圾keyword加入到 "exclude" 列表。之后就再也没有这样的问题了。这样看来,对我们自己站点以及日志的监控是多么重要,即使是一星期对每一个站点/server仅仅进行一次高速检查。
原文链接:http://calladeveloper.blogspot.com/2013/03/howto-read-mysql-slow-query-log.html。
学会读懂 MySql 的慢查询日志的更多相关文章
- 一文读懂MySQL的事务隔离级别及MVCC机制
回顾前文: 一文学会MySQL的explain工具 一文读懂MySQL的索引结构及查询优化 (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) 就软件开 ...
- PHP慢脚本日志和Mysql的慢查询日志
1.PHP慢脚本日志 间歇性的502,是后端 PHP-FPM 不可用造成的,间歇性的502一般认为是由于 PHP-FPM 进程重启造成的. 在 PHP-FPM 的子进程数目超过的配置中的数量时候,会出 ...
- PHP慢脚本日志和Mysql的慢查询日志(转)
1.PHP慢脚本日志 间歇性的502,是后端 PHP-FPM 不可用造成的,间歇性的502一般认为是由于 PHP-FPM 进程重启造成的. 在 PHP-FPM 的子进程数目超过的配置中的数量时候, ...
- mysql 通过慢查询日志查写得慢的sql语句
MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_t ...
- mysql 开启慢查询 如何打开mysql的慢查询日志记录
mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢,接下来将详细为您介绍 原文出自:http://www.jbxue ...
- 读懂mysql慢查询日志
我们来看一下如何去读懂这些慢查询日志.在跟踪慢查询日志之前,首先你得保证最少发生过一次慢查询.如果你没有可以自己制造一个:root@server# mysql -e 'SELECT SLEEP(8); ...
- 如何读懂SQL Server的事务日志
简介 本文将介绍SQL Server的事务日志中记录了哪一些信息,如何来读懂这些事务日志中信息.首先介绍一个微软没有公开的函数fn_dblog,在文章的接下来的部分主要用到这个函数来读取事务日志. f ...
- 读懂MySQL执行计划
原文:https://mp.weixin.qq.com/s/-BlLvBKcF-yalELY7XkqaQ 前言 在之前的面试过程中,问到执行计划,有很多童鞋不知道是什么?甚至将执行计划与执行时间认为是 ...
- MYSQL开启慢查询日志实施
查看当前服务器是否开启慢查询:1.快速办法,运行sql语句show VARIABLES like "%slow%" 2.直接去my.conf中查看.my.conf中的配置(放在[m ...
随机推荐
- ida动态调试笔记
ida动态调试笔记 目标文件:阿里安全挑战赛的第二题 点击打开链接 使用环境:ida6.8点击打开链接,adt bundle点击打开链接 首先打开avd安卓模拟器,界面如下: 在dos下运行adb命令 ...
- HDU——2067小兔的棋盘(卡特兰数&递推DP)
小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- BZOJ4916 神犇和蒟蒻 【欧拉函数 + 杜教筛】
题目 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; 输入格式 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; 输出格式 请你输出一个整数A=\sum ...
- Process类,Thread类,Pool类,gevent类,ProcessPoolExecutor,ThreadPoolExecutor的用法比较
一 Process类 multiprocessing模块下的一个类 创建子进程. 有两种方法 方法一 from multiprocessing import Process import os def ...
- bzoj 2799 [Poi2012]Salaries 性质+二分
题目大意 给出一棵n个结点的有根树,结点用正整数1~n编号. 每个结点有一个1~n的正整数权值,不同结点的权值不相同, 并且一个结点的权值一定比它父结点的权值小(根结点的权值最大,一定是n). 现在有 ...
- 洛谷 [P2886] 牛继电器Cow Relays
最短路 + 矩阵快速幂 我们可以改进矩阵快速幂,使得它适合本题 用图的邻接矩阵和快速幂实现 注意 dis[i][i] 不能置为 0 #include <iostream> #include ...
- Linux 之 LNMP服务器搭建-Nginx
LNMP服务器搭建-Nginx 参考教程:[千峰教育] 系统版本: CentOS 6.8 关闭防火墙和Selinux service iptables stop setenforce 安装Nginx ...
- yii加载自带验证码的方法
Yii的源码包里面是自带有验证码的相关类的,因此在使用验证码的时候无需再加载外部验证码类来助阵了.下面本文将介绍一下如何在项目中加载Yii自带的验证码功能. 具体分三步: (1)在需要加载验证码的co ...
- C、C++变量auto,static,register,extern类型
auto: 推导类型变量:编译器选项指示编译器如何使用 auto 关键字来声明变量. 如果指定默认选项 /Zc:auto,编译器从其初始化表达式中推导声明的变量的类型. 如果指定 /Zc:auto-, ...
- 如何解决div里面img图片下方有空白的问题?
空白产生原因: 图片默认的vertical-align是baseline,(元素放置在父元素的基线上,也就是xx下边距) 一个inline-block元素,如果里面没有inline元素,或者overf ...