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



标题: 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> 
 

   【源于本人笔记】 若有书写错误,表达错误,请指正...  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值