MySQL进程列表历史维护

时间:2015-10-14 21:33:25

标签: python mysql database

我正在考虑编写一个工具来维护查询历史记录的时间超过 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并在queryTag表格上添加QUERY_META列。它将按列作为伪组进行工作!这里也有复杂的问题,但是在这里打字会延长已经很长的帖子。

由于该工具的受众和一些系统限制,我不能将慢查询日志用于此目的。

如果有一个工具已经这样做,请指出我,因为我很难确定谷歌的用途。

1 个答案:

答案 0 :(得分:0)

Percona有一个名为pt-query-digest的令人难以置信的工具。它可以满足您的所有需求。我一直使用慢查询日志,但它有其他选项。来自帮助:

  

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

请务必查看--group-by的选项,因为它们非常强大。