有时候我们需要统计线上的SQL执行情况,比如想知道哪条SQL执行最频繁,我们可以开启general_log,然后进行统计,但是general_log开启非常损耗性能,那么我们可以使用vc-mysql-sniffer来代替,该工具是编译好的二进制,下载即可使用。下载地址:

https://www.vividcortex.com/resources/network-analyzer-for-mysql

我这里修改了网上的一个脚本,分析vc-mysql-sniffer抓取到的结果统计频繁执行的SQL。

#!/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
vc_sniffer_time=5
port=sys.argv[1]
vc_cmd=""" /usr/bin/timeout %s /data/software/vc-mysql-sniffer -binding="[::]:%s" > /tmp/tmp_vc_mysql_%s.txt """ % (vc_sniffer_time,port,port)
outtext = commands.getoutput(vc_cmd)
cmd=""" grep -Ev '# Time:|# User@Host' /tmp/tmp_vc_mysql_%s.txt |sed 's/# Query_time.*/myxxxxx/g' |awk BEGIN{RS=EOF}'{gsub(/\\n/," ");print}'|awk BEGIN{RS=EOF}'{gsub(/myxxxxx/,"\\n");print}' >/tmp/vc_mysql_%s.txt""" % (port,port)
outtext = commands.getoutput(cmd)
file="/tmp/vc_mysql_%s.txt" % (port)
logFo = open(file)
for line in logFo:
line = re.sub(r"\n","",line)
lineMatch = re.match(r".*",line)
if lineMatch:
lineTmp = lineMatch.group(0)
lineTmp = lineTmp.lower()
# remove extra space
lineTmp = re.sub(r"\s+", " ",lineTmp)
# replace values (value) to values (x)
lineTmp = re.sub(r"values\s*\(.*?\)", "values (x)",lineTmp)
# replace filed = 'value' to filed = 'x'
lineTmp = re.sub(r"(=|>|<|>=|<=)\s*('|\").*?\2","\\1 'x'",lineTmp)
# replace filed = value to filed = x
lineTmp = re.sub(r"(=|>|<|>=|<=)\s*[0-9]+","\\1 x",lineTmp)
# replace like 'value' to like 'x'
lineTmp = re.sub(r"like\s+('|\").*?\1","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()
python analysis-vc-log.py  | sort | uniq -c | sort -nr |head -n 

抓取mysql 3310端口,统计执行最频繁的10条SQL。结果我这里就不贴上来了。有兴趣的同学自己测试。

参考资料:

https://www.centos.bz/2015/02/analysis-mysql-general-log/

vc-mysql-sniffer统计MySQL的SQL分布的更多相关文章

  1. mysql按年度、季度、月度、周、日统计查询的sql语句

    本文介绍一些mysql中用于查询的sql语句,包括按年度.季度.月度.周.日统计查询等,有需要的朋友,可以参考下. 一.年度查询 查询 本年度的数据   SELECT * FROM blog_arti ...

  2. MySQL分段统计SQL写法 与 Mybatis 异常 java.math.BigDecimal cannot be cast to java.lang.Integer

    mysql> select end) as '<60', end) as '60~69', end) as '70~79', end) as '80~89', end) as '>= ...

  3. Mysql抓包工具 - MySQL Sniffer 使用小结 (含带general_log日志)

    在mysql运维工作中,一般会使用tcpdump做一些分析(直接读分析日志比较难以看明白,在数据库连接值高时使用):对于mysql实时的连接监控分析,通常会使用"mysqladmin/sho ...

  4. 如何查找MySQL中查询慢的SQL语句

    如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...

  5. MySQL查询统计,统计唯一值并分组

    做个笔记 SQLyog客户端访问MySQL服务器 统计数据:次数总数, 次数成功率,对象(obj)总数,对象(obj)成功率 要求:按时间排序和分组 sql语句如下: SELECT a.date AS ...

  6. VC++6.0连接MySQL数据库(MySQL API)

    一.MySQL的安装   Mysql的安装去官网下载就可以...最新的是5.7版本..二.VC6.0的设置(1)打开VC6.中选0 工具栏Tools菜单下的Options选项,在Directories ...

  7. 如何查找MySQL中查询慢的SQL语句(转载)

    转载自https://www.cnblogs.com/qmfsun/p/4844472.html 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那 ...

  8. Vc数据库编程基础MySql数据库的表查询功能

    Vc数据库编程基础MySql数据库的表查询功能 一丶简介 不管是任何数据库.都会有查询功能.而且是很重要的功能.上一讲知识简单的讲解了表的查询所有. 那么这次我们需要掌握的则是. 1.使用select ...

  9. MySQL抓包工具:MySQL Sniffer【转】

    本文来自:https://github.com/Qihoo360/mysql-sniffer 简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer ...

  10. 何在mysql查找效率慢的SQL语句?

    如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启 ...

随机推荐

  1. HTTP一、HTTP介绍与套接字

    目录 一.套接字 1.HTTP与Apache 2.应用层协议:HTTP 3.套接字(IP+协议端口的组合) 4.套接字图示 5.套接字相关知识点 二.HTTP         一.套接字     1. ...

  2. [swarthmore cs75] Compiler 1 – Adder

    课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第3次大作业. 编译的过程:首先解析(parse)源代码,然后成抽象语法树(AST),再生成汇编 ...

  3. Exception.ToString()使用及其他方法比较

    在日常C#的编码过程中,我们常常会使用try...catch...来抓住代码异常,并且在异常的时候打印log, 如下 try { } catch (Exception e) { //输出Log信息等 ...

  4. Android中屏幕保持唤醒

    1.锁的类型 PowerManager中各种锁的类型对CPU .屏幕.键盘的影响: PARTIAL_WAKE_LOCK : 保持CPU 运转,屏幕和键盘灯有可能是关闭的. SCREEN_DIM_WAK ...

  5. 《JavaScript 高级程序设计》读书笔记二 使用JavaScript

    一   <script>元素 a.四个属性: async:立即异步加载外部脚本: defer:延迟到文档完全被解析再加载外部脚本: src:外部脚本路径: type:脚本语言的内容类型: ...

  6. 移动APP外挂攻防实战

    前言 近日,某某龙在2018年的一次会议上发表了一个演讲,4000多人聚集在现场玩“跳一跳”游戏.随着他们指尖的翻飞跳跃,大屏幕上的现场排名也在不断刷新……而在全场的惊叹声中,最高分出现了,967分! ...

  7. 16bit CRC算法C语言实现

    #define CRC_16_POLYNOMIALS 0x8005 unsigned short CRC16_3(unsigned char* pchMsg, unsigned short wData ...

  8. 原来你离BAT只有一步之遥

    ladies and乡亲们 喜迎全民嗨购双11 i春秋准备搞一波大优惠 优惠力度有多大 跨店凑单满400-50? 指定商品199减100? 史无钜惠 不凑单 不指定 一次直降9000元 原价:2580 ...

  9. 省钱版----查找 IoT 设备TTL线序__未完待续

    作者:仙果 原文来自:省钱版—-查找 IoT 设备TTL线序 省钱版----查找 IoT 设备TTL线序__未完待续 缘由 在IoT固件调试分析的过程中,建议首先在IoT设备的板子上焊接调试线,这是能 ...

  10. java数据结构面试问题—快慢指针问题

    上次我们学习了环形链表的数据结构,那么接下来我们来一起看看下面的问题, 判断一个单向链表是否是环形链表? 看到这个问题,有人就提出了进行遍历链表,记住第一元素,当我们遍历后元素再次出现则是说明是环形链 ...