首页 > 其他 > 详细

基于pt-query-digest的慢查询日志追踪脚本一例

时间:2016-02-25 17:08:53      阅读:321      评论:0      收藏:0      [点我收藏+]

  percona-toolkit被称为MySQL DBA的“瑞士***”,其强大性不言而喻。而其中的慢查询分析工具“pt-query-digest”相比官方的“mysqldumpslow”提供了很多额外的属性,例如灵活的过滤器,基于库和表的分析排序等等。

  今天分享一例基于“pt-query-digest”和邮件自动追踪MySQL慢查询日志的小脚本,同时避免对同类型的sql语句重复提示。

  直接上脚本(只要安装了percona-toolkit,该脚本可以说是傻瓜式的,当然还是看看官方文档深入理解一下最好啦)

#!/bin/sh

date_ago=`date +%Y-%m-%d\ %H:%M:%S --date=‘15 min ago‘`    #获取15分钟以前的时间,因为我的crontab里面每15分钟执行一遍该脚本  

alias mysql_con=‘mysql -uuser -ppwd‘

#以下两行操作会在test库里创建query_history和query_review两张表
pt-query-digest --history u=user,p=pwd,D=test /mysqldata/dev-env-slow.log --no-report
pt-query-digest --review u=user,p=pwd,D=test /mysqldata/dev-env-slow.log --no-report

rm -f /tmp/slow_query_inc 2> /dev/null    #清空存放上次结果的文件

#查询出 first_seen 时间晚于15分钟前的 checksum
for i in `mysql_con -N -s -e "SELECT checksum FROM percona_schema.query_review where first_seen = last_seen and first_seen > ‘$date_ago‘" 2>/dev/null`;do
    #从query_history表查询相关信息,并对输出做些许调整
    mysql_con -e "SELECT sample as Statment,ts_max as Time,query_time_pct_95 as Query_Time,Rows_sent_pct_95 as Rows_Sent,Rows_examined_pct_95 as Rows_Examined FROM percona_schema.query_history where checksum=‘$i‘ \G" 2> /dev/null|sed ‘s/^[ \t]* //g‘|awk -F: ‘{print $1" :    "$2}‘ >> /tmp/slow_query_inc
done

if [ -s /tmp/slow_query_inc ];then    #/tmp/slow_query_inc文件有内容才发邮件
    mail -s ‘slow_log in last 15 min----from Dev‘ k@test.com < /tmp/slow_query_inc
fi

然后在crontab里设置每15分钟运行该脚本,有新的慢查询出现的话,就会收到邮件啦,如下图:

技术分享

另有一点:sql监控这个环节最好从开发环境做起,将慢sql扼杀在萌芽阶段^_^


本文出自 “奋进的K” 博客,请务必保留此出处http://kaifly.blog.51cto.com/3209616/1745011

基于pt-query-digest的慢查询日志追踪脚本一例

原文:http://kaifly.blog.51cto.com/3209616/1745011

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!