mysql統計類似SQL語句查詢次數


mysql統計類似SQL語句查詢次數
vc-mysql-sniffer 工具抓取的sql分析。
1、先用shell腳本把所有enter符號替換為null,再根據語句前后的字符分隔語句
grep -Ev '# Time:|# User@Host' /tmp/tmp_vc_mysql.txt |sed 's/# Query_time.*/myxxxxx/g' |awk BEGIN{RS=EOF}'{gsub(/\\n/," ");print}'|awk BEGIN{RS=EOF}'{gsub(/myxxxxx/,"\\n");print}'
 
2、python實現替換無關字符串 vim analyze_sql.py
#!/usr/bin/python
#coding:utf8
# python analysis-vc-log.py 3315 | sort | uniq -c | sort -nr |head -n 10
 
import re
import sys
import os
import commands
 
if len(sys.argv) == 2:
    logPath = sys.argv[1]
    if not os.path.exists(logPath):
        print ("file " + logPath + " does not exists.")
        sys.exit(1)
else:
    print ("Usage: " + sys.argv[0] + " logPath")
    sys.exit(1)
logFo = open(logPath)
 
for line in logFo:
    line = re.sub(r"\n","",line)
    lineMatch = re.match(r".*",line,re.IGNORECASE)
    if lineMatch:
        lineTmp = lineMatch.group(0)
        # remove extra space 把多個空格的替換成一個空格 \s+ 表示空格至少出現一次
        lineTmp = re.sub(r"\s+", " ",lineTmp)
        # replace values (value) to values (x) \s*表示有0或多個空格, .*表示匹配除了換行外任意多次, ?為非貪婪模式
        lineTmp = re.sub(r"values\s*\(.*?\)", "values (x)",lineTmp)
        # replace filed = 'value' to filed = 'x'  s*('|\")表示匹配單引或雙引0或多次 \2表示應用第二個(...)分區,即 ('|\")  \\1可以寫成r"\1" 其實只是\<number> 。表示應用第一個分組 (=|>|<|>=|<=)
        lineTmp = re.sub(r"(=|>|<|>=|<=)\s*('|\").*?","\\1 'x'",lineTmp)
        # replace filed = value to filed = x  s*  匹配0或多個空格  [0-9]+ 匹配一個或多個數字
        lineTmp = re.sub(r"(=|>|<|>=|<=)\s*[0-9]+","\\1 x",lineTmp)
        # replace like 'value' to like 'x'
        lineTmp = re.sub(r"like\s+('|\").*?","like 'x'",lineTmp)
        # replace in (value) to in (x)   (.*?\) 匹配括號內的任意內容
        lineTmp = re.sub(r"in\s+\(.*?\)","in (x)",lineTmp)
    # replace between '...' and '...' to between 'x' and 'x'
    lineTmp = re.sub(r"between\s+('|\").*?\1\s+and\s+\1.*?\1","between 'x' and 'x' ",lineTmp)
    # replace between ... and ... to between x and x
    lineTmp = re.sub(r"between\s+[0-9]+\s+and\s+[0-9]+","between x and x ",lineTmp)    
        # replace limit x,y to limit
        lineTmp = re.sub(r"limit.*","limit",lineTmp)
        print lineTmp
logFo.close()
3 執行 python  analyze_sql.py tmp_vc_mysql.txt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM