MySQL slow query [慢查询] 资料整理


链接:http://blog.itpub.net/28602568/viewspace-1650130/

标题: MySQL slow query [慢查询] 资料整理

作者:lōττéry版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]


前言:
MySQL中提供了一个慢查询的日志记录功能,可以把查询SQL语句时间大于多少秒的语句写入慢查询日志,日常维护中可以通过慢查询日志的记录信息快速准确地判断问题所在。

 (有点类似 oracle的v$session_longops )

如下为MySQL slow query[慢查询]配置、log文件参数介绍、脚本实现每天以日期格式生成新的log文件等..

1、/etc/my.cnf 配置 slow query  




#开启慢查询

slow_query_log=on   
#超过2秒的查询就视为慢查询

long_query_time=2

#记录日志

slow_query_log_file=/data/mysql/slow.log


2、mysql数据库中查看参数具体值




1)mysql> show variables like '%long_query_time%';
     +-----------------+----------+
     | Variable_name   | Value    |
     +-----------------+----------+
     | long_query_time | 2.000000 |  
     +-----------------+----------+  

2) mysql>  show variables like '%slow_query_log%';
     +------------------------------+---------------------------+
     | Variable_name                          | Value                     |
     +------------------------------+---------------------------+
     | slow_query_log                        | ON                        |
     | slow_query_log_file                  | /data/public3306/slow.log |
     +------------------------------+---------------------------+ 
mysql> 



 

3、slow.log信息解读 及其mysqldumpslow分析简单介绍



1)

slow.log信息解读

# Time: 070927  8:08:52

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

# Query_time: 372  Lock_time: 136  Rows_sent: 152  Rows_examined: 263630

select id, name from manager where id in (66,10135);

Query_time == 用的时间'秒'

Lock_time   ==锁的时间'秒'

Rows_sent  ==返回行数

Rows_examined==共查询行数

2)

slow log 查看工具mysqldumpslow  

通过mysqldumpslow –help或--help 查看sllow query log 

常用:

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

###### 查询慢查询log中超过10s sql的个数(包括重复的sql)..

grep Query_time: slow.log |awk '$3>=10{printf("%.f\n",$3)}'|wc -l

4、其他参数设置 



慢查询相关的 参数log_queries_not_using_indexes

如果log_queries_not_using_indexes为ON的话,当执行一个sql语句的时候,如果一个表没有索引就会把这个信息记录在慢查询文件中

show variables like "%log_queries_not%" ; 

set global log_queries_not_using_indexes=on;


5、脚本实现slow query每天以日期形式新生成一个log




*** 为了便捷统计每天slow query查询 量和性能问题,特写脚本实现slow query每天以日期形式新生成一个log 

*** 其实就是一个 /usr/bin/mysql -uroot  -N -e "set global slow_query_log_file='/data/mysql/slow_`date +%Y_%m_%d`.log';" 

*** 只是直接在crontab 写命令一直不生效,考虑可能是因为"" 双引号原因,所以放在a.sh 提供执行权限 ‘x’即可执行.

具体如下 :  

[root@lottery ~]# crontab  -l

0 0 * * * /bin/sh  /root/a.sh

[root@lottery ~]# cat a.sh

 /usr/bin/mysql -uroot  -N -e "set global slow_query_log_file='/data/mysql/slow_`date +%Y_%m_%d`.log';"

[root@lottery ~]# 

mysql>  show variables like 'slow_query%log%';

+------------------------------+-------------------------------------+

| Variable_name                          | Value                                               |
+-------------------------------+-------------------------------------+

| slow_query_log                         | ON                                                  |
| slow_query_log_file                   | /data/mysql/slow_2015_05_12.log   |
+-------------------------------+-------------------------------------+ 

mysql> system date +%Y_%m_%d
2015_05_12
mysql> 

 

  【源于本人笔记】 若有书写错误,表达错误,请指正... 

时间: 2024-10-11 23:55:46

MySQL slow query [慢查询] 资料整理的相关文章

每天将MYSQL SLOW QUERY REPORT分发到各个邮箱供分析改善数据库性能-PYTHON

/var/spool/cron/下面加入自动任务: 50 3 * * * mysqlsla -sort c_sum -lt slow /var/log/XXX_slow.log >/var/log/XXX_mysql_slow.log 10 4 * * * python /XXX/XXX_slow_report/mail_mysql_slow_report.py   mail_mysql_slow_report.py代码如下: 1 from smtplib import SMTP 2 impor

mySQL Slow Query Log Rotation(慢查询日志轮循设置)

要分析公司网站MYSQL性能,常规MY.CNF调优是一方面,慢查日志分析也重要. 但现在日志太大了,作一个每天自动切割的任务.将脚本放在/etc/logrotate.d/. 如何分析导出日志,以后再写. # place this script in /etc/logrotate.d/ or your appropriate logrotate dir. ~~~~~~~~~~~~~~~~~~ /var/log/XXX_MYSQL_slow.log {     daily     rotate 5

MySQL 慢查询日志(Slow Query Log)

    同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等.本文主要描述通用查询日志.   1.MySQL日志文件系统的组成   a.错误日志:记录启动.运行或停止mysqld时出现的问题.   b.通用日志:记录建立的客户端连接和执行的语句.   c.更新日志:记录更改数据的语句

mysql中slow query log慢日志查询分析

一.慢查询日志 配置 开启慢查询日志 , 配置样例: /etc/mysql/my.cnf [mysqld] log-slow-queries 在 my.cnf 配置文件中增加上述配置项并重启 mysql 服务,这时 mysql 慢查询功能生效.慢查询 日志将写入参数 DATADIR (数据目录:/var/lib/mysql) 指定的路径下,默认文件名是 host_name-slow.log . 和错误日志.查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取.下例中演示了慢查询日志的设置

mysql性能优化-慢查询分析、优化索引和配置

目录 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询   2索引及查询优化 三.配置优化 1)      max_connections 2)      back_log 3)      interactive_timeout 4)      key_buffer_size 5)      query_cache_size 6)      record_buffer_size 7)      read_rnd_b

《MySQL 深入浅出》 1-17章节 阅读整理

链接:http://blog.itpub.net/28602568/viewspace-1622174/ 标题: <MySQL 深入浅出> 1-17章节 阅读整理  作者:lōττéry版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.] **  以下提到oracle部分只是对比扩展,本文重点是 <MySQL 深入浅出>书中1-17章节 个人觉得需要提笔一记的知识点整理. **  该书讲解  VERSION() ==>'5.0.18-nt' ,默认引擎 :

MySQL 物理文件体系结构的简单整理说明

原文:MySQL 物理文件体系结构的简单整理说明   本文出处:http://www.cnblogs.com/wy123/p/7102128.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他)   本文的数据库版本是MySQL5.7.18,简单介绍一下MySQL数据文件目录的物理结构和作用,从中可以窥见MySQL的整体上的物理文件结构以及逻辑功能.可以从整体结构上了解到MySQL的物理体系架构(本人学习的思路往

JSON资料整理

原文:JSON资料整理 PS:JSON基础知识整理,大神可移步 目录 1.什么是json 2.json语法规则 3.json基础结构 4.json基础示例 5.JSON和XML比较 6. .NET操作JSON          原始方式          通用方式          内置方式          契约方式   通过序列化将.net对象转换为JSON字符串 使用LINQ to JSON定制JSON数据 处理客户端提交的JSON数据   1.什么是JSON   JSON(JavaScr

SQLServer优化资料整理[转]

SQLServer优化资料整理 50种方法优化SQL Server数据库查询(有N多错别字) http://database.51cto.com/art/200612/35820.htm 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最