程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 基於pt-query-digest的慢查詢日志追蹤腳本一例

基於pt-query-digest的慢查詢日志追蹤腳本一例

編輯:MySQL綜合教程

基於pt-query-digest的慢查詢日志追蹤腳本一例


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='15minago'`#獲取15分鐘以前的時間,因為我的crontab裡面每15分鐘執行一遍該腳本

aliasmysql_con='mysql-uuser-ppwd'

#以下兩行操作會在test庫裡創建query_history和query_review兩張表
pt-query-digest--historyu=user,p=pwd,D=test/mysqldata/dev-env-slow.log--no-report
pt-query-digest--reviewu=user,p=pwd,D=test/mysqldata/dev-env-slow.log--no-report

rm-f/tmp/slow_query_inc2>/dev/null#清空存放上次結果的文件

#查詢出first_seen時間晚於15分鐘前的checksum
foriin`mysql_con-N-s-e"SELECTchecksumFROMpercona_schema.query_reviewwherefirst_seen=last_seenandfirst_seen>'$date_ago'"2>/dev/null`;do
#從query_history表查詢相關信息,並對輸出做些許調整
mysql_con-e"SELECTsampleasStatment,ts_maxasTime,query_time_pct_95asQuery_Time,Rows_sent_pct_95asRows_Sent,Rows_examined_pct_95asRows_ExaminedFROMpercona_schema.query_historywherechecksum='$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_loginlast15min----fromDev'[email protected]

然後在crontab裡設置每15分鐘運行該腳本,有新的慢查詢出現的話,就會收到郵件啦,如下圖:

wKioL1bOqyXwxrvCAAAus1mMnBQ503.png

另有一點:sql監控這個環節最好從開發環境做起,將慢sql扼殺在萌芽階段^_^

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved