mysql查询日志计数统计
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,分析统计MySQL general日志 找出查询次数最多的SQL当我们需要优化MySQL查询时,第一想到的是开启慢日志,慢日志可以看到执行消耗超过一定时间的SQL语句和未使用索引的SQL。但如果我们想
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
hp服务器上海代理商
unilex数据库
网络安全主体黑板
怎么查看dns服务器的ip
mc服务器映射端口
sql数据库字段设计
四川大学网络安全人才
爷爷奶奶网络安全宣传
vmware怎么搭建虚拟服务器
量化全自动交易软件开发
市南区微信小程序软件开发哪家好
仓库数据库表设计
软件开发数据的交付
网络安全法的认识
个人软件开发者大会
jsp数据库
数据库系统工程师 培训
北京物流软件开发代码
安卓软件开发热线
服务器管理必备知识
网络安全主体黑板
自有服务器和托管服务器的区别
软件开发价格聚顶科技专业
软件开发 会产生什么费用
饥荒服务器怎么租
sql数据库启动引擎
数据库的权限分为几种
网站排名软件开发
如何从数据库中阅读论文
学生应关注网络安全的认识