MySQL进程列表历史记录维护

3
我想写一个工具来维护超过5秒的查询的历史记录。
工具后端设置如下:
Table1:QUERY_META  
queryId int() (PK)  
query text  
regDate date  

Table2: QUERY_STAT  
queryId: int() (FK)  
runDate: date (date of Run)  
avgTimeTaken:int()  
noOfRuns: int()  

为了使其“智能化”,我希望只保留独特的查询。我的意思是,假设我有以下查询:
a) SELECT a,b,c from table1 where x='x1' and y != 'y1'; (10秒)
b) SELECT a,b,c from table1 where x='x2' and y != 'y2'; (10秒)
基本上,我想存储如下查询:
SELECT a,b,c from table1 where x = <x> and y != <y>;

这将使得检查有多少相同类型的查询更加容易。 我的工具需要做的是:对where子句进行规范化处理,即在关键字WHERE处进行拆分。如何规范化/标准化where子句呢? 有很多比较运算符,我不知道如何轻松进行字符串操作。目前我不考虑多个where子句。 我认为自己擅长使用Python、MySQL(但愿意尝试任何可以完成任务的工具)。 我的备选计划是基于select,将查询标签列添加到QUERY_META表中。它将作为一个伪分组列!这里也存在一些问题,但是在此输入所有内容将会让本来已经很长的帖子变得更长。 由于工具的受众和一些系统限制,我无法使用慢查询日志来实现此目的。 如果已经有这样的工具,请指引我到相关位置,因为我难以确定要搜索什么。
1个回答

0

有一个叫做pt-query-digest的神奇工具,来自Percona。它可以实现你想要的一切甚至更多。我一直使用它来分析慢查询日志,但它还有其他选项。从帮助文档中可以看到:

pt-query-digest是一个复杂但易于使用的工具,用于分析MySQL查询。它可以分析来自MySQL慢查询、常规查询和二进制日志的查询。(必须先将二进制日志转换为文本,参见--type)。它还可以使用SHOW PROCESSLIST和来自tcpdump的MySQL协议数据。默认情况下,该工具报告哪些查询最慢,因此最需要优化。通过使用--group-by、--filter和--embedded-attributes等选项,可以创建更复杂和定制的报告。

一定要查看--group-by选项,因为它们非常强大。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接