mysql查询日志计数统计
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,分析统计MySQL general日志 找出查询次数最多的SQL当我们需要优化MySQL查询时,第一想到的是开启慢日志,慢日志可以看到执行消耗超过一定时间的SQL语句和未使用索引的SQL。但如果我们想
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
全文数据库使用
惠普服务器进高级选项
幼儿教案网络安全教育
电脑网络安全在哪
网络技术应用基础
无法识别mdb数据库
邯郸net软件开发
传说对决体验服无法登录服务器
数据库文件分离没有访问权限
海南邵动网络技术有限公司客服
网络技术公司发展空间
数据库开发工程师面试题基础
河南网络技术专业排名
逛逛网厦门网络技术有限公司股东
河南业务流程外贸软件开发
最终幻想14的服务器
绍兴订制软件开发
网络安全方向就业岗位
zimbra服务器
hp服务器机柜滑轨拆卸
doris数据库书籍
网络安全宣传周 方案
软件开发前段与后端
洛阳游戏软件开发
网络安全第二版胡道元编著
云盘服务器架设
网络安全信息周
西安c 软件开发招聘
手机网络安全危害
网络安全在线实验平台