我正在考虑编写一个工具来维护查询历史记录的时间超过 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
列。它将按列作为伪组进行工作!这里也有复杂的问题,但是在这里打字会延长已经很长的帖子。
由于该工具的受众和一些系统限制,我不能将慢查询日志用于此目的。
如果有一个工具已经这样做,请指出我,因为我很难确定谷歌的用途。
答案 0 :(得分:0)
Percona有一个名为pt-query-digest的令人难以置信的工具。它可以满足您的所有需求。我一直使用慢查询日志,但它有其他选项。来自帮助:
pt-query-digest是一种复杂但易于使用的分析工具 MySQL查询。它可以分析来自MySQL的查询慢,一般和 二进制日志。 (必须先将二进制日志转换为文本,请参阅 - 类型)。它还可以使用来自tcpdump的SHOW PROCESSLIST和MySQL协议数据。默认情况下,该工具会报告哪些查询最慢, 因此最重要的是优化。更复杂和 可以使用类似的选项创建自定义报告 --group-by, - filter和--embedded-attributes。
请务必查看--group-by的选项,因为它们非常强大。