有没有一种工具来过滤基于数据库的MySQL慢查询日志?

我目前正试图调整单个数据库(实际上是一组类似的数据库)的性能,但慢查询日志有一堆数据,我目前不感兴趣的其他数据库。find一些慢日志过滤脚本,但实际上似乎没有根据数据库名称进行过滤。

通过查看日志文件(对于5.0.18),数据库名称似乎出现在每个查询块中,所以这应该是一个相当简单的编程来做这个过滤的事情(这看起来像我会做的),但为什么没有人(我可以find)已经做到了,如果这是容易的?

例如:

# Time: 090226 11:17:04 # User@Host: user1[user1] @ host [10.0.0.3] # Query_time: 12 Lock_time: 0 Rows_sent: 2 Rows_examined: 4042564 use [db1]; SELECT ... # Time: 090226 11:17:34 # User@Host: user1[user1] @ host [10.0.0.3] # Query_time: 12 Lock_time: 0 Rows_sent: 0 Rows_examined: 4042560 SELECT ... # Time: 090226 12:32:40 # User@Host: user2[user2] @ host [10.0.0.3] # Query_time: 8 Lock_time: 0 Rows_sent: 123390 Rows_examined: 812841 use [db2]; SELECT ... 

前两个查询都是针对同一个数据库的,所以一个use语句覆盖了它们两个。

你可以使用这个小awk脚本来完成这个工作:

 awk '{ if ($0 ~ /use \[.*\];/) { if ($2 ~ /db1/) { found = 1; } else { found = 0; }} if (found == 1) { print $0; }}' <mysqllogfile> 

只需用您正在search的数据库名称replacedb1即可。 当你从上面的例子,这个脚本将给你:

 use [db1]; SELECT ... # Time: 090226 11:17:34 # User@Host: user1[user1] @ host [10.0.0.3] # Query_time: 12 Lock_time: 0 Rows_sent: 0 Rows_examined: 4042560 SELECT ... # Time: 090226 12:32:40 # User@Host: user2[user2] @ host [10.0.0.3] # Query_time: 8 Lock_time: 0 Rows_sent: 123390 Rows_examined: 812841 

我不知道你的操作系统是什么,但awk / gawk可用于多种操作系统。

我最终发现了mysqlsla,并且在补丁(我已经提交给他们,但是如果有人愿意的话,会很高兴的放在这里)做一些补丁之后,让它做我的投标。