千家信息网

mysql查询日志计数统计

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,分析统计MySQL general日志 找出查询次数最多的SQL当我们需要优化MySQL查询时,第一想到的是开启慢日志,慢日志可以看到执行消耗超过一定时间的SQL语句和未使用索引的SQL。但如果我们想
千家信息网最后更新 2026年10月31日mysql查询日志计数统计

分析统计MySQL general日志 找出查询次数最多的SQL


当我们需要优化MySQL查询时,第一想到的是开启慢日志,慢日志可以看到执行消耗超过一定时间的SQL语句和未使用索引的SQL。但如果我们想分析所有SQL查询的分布,即哪类SQL查询次数最多的时候,我们可以开启general log来统计。

开启general log

mysql> show  variables like '%general%';

+------+-------------+
| Variable_name | Value |
+------+-------------+
| general_log | OFF |
| general_log_file | /usr/local/mysql/data/localhost.log |
+------+-------------+

mysql> set global general_log = "ON";

analysis-general-log.py脚本

#!/usr/bin/python # sort and count mysql general log# Author: Jason# Url: www.centos.bz# Email: admin#centos.bz# Created: UTC 2015-02-15 17:51:53 import reimport sysimport os 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)match = 0 for line in logFo:    line = re.sub(r"\n","",line)    if match == 0:        # match line begin with numbers        lineMatch = re.match(r"\s+[0-9]+\s+.*",line,flags=re.I)        if lineMatch:            lineTmp = lineMatch.group(0)            match = match + 1            continue     elif match == 1:        # match line begin with numbers        lineMatch = re.match(r"\s+[0-9]+\s+.*",line,flags=re.I)        if lineMatch:            # match only query            lineMatchQuery = re.match(r".*Query\s+(.*)",lineTmp,flags=re.I)            if lineMatchQuery:                lineTmp = lineMatchQuery.group(1)                # remove extra space                lineTmp = re.sub(r"\s+", " ",lineTmp)                # replace values (value) to values (x)                lineTmp = re.sub(r"values\s*\(.*?\)", "values (x)",lineTmp,flags=re.I)                # 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,flags=re.I)                # replace in (value) to in (x)                lineTmp = re.sub(r"in\s+\(.*?\)","in (x)",lineTmp,flags=re.I)                # replace limit x,y to limit                lineTmp = re.sub(r"limit.*","limit",lineTmp,flags=re.I)                                print (lineTmp)             match = 1            lineTmp = lineMatch.group(0)        else:                lineTmp += line            match = 1 logFo.close()

使用方法:

analysis-general-log.py general.log | sort | uniq -c | sort -nr

该python脚本使用与python2.7以上环境

查询 日志 统计 次数 脚本 分析 使用方法 方法 时候 时间 环境 索引 语句 一想 消耗 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 哈尔滨大商圈互联网科技有限公司 广州百单互联网科技有限公司 科技金融是不是互联网金融 互联网科技垄断 工业互联网科技新基建 互联网科技资迅 互联网科技作文 汇久创客互联网科技 丰台科技园 互联网公司 青海省互联网新科技 西藏七维空间互联网科技有限公司 如何创新互联网科技 明优互联网科技有限公司 领航科技大厦互联网公司 上海互联网科技公司ppt 易企秀互联网科技是做什么的 科技互联网行业投资研究 杭州科技互联网公司有哪些 互联网 科技节活动 微视频大赛 小米移动互联网科技园 有木互联网科技 撒么互联网科技公司 速维有品互联网信息科技(苏州)有限公司 银川新华互联网科技学校联系电话 玉溪新华互联网科技好不好 中科明德北京互联网科技 中天科技中国工业互联网 美国互联网科技公司 山东大美朱楼互联网科技有限公司
0