我们正在尝试进行一些服务器性能调试,我想捕捉几分钟内在我们的MySQL服务器上运行的查询的快照。
我对MySQL的SHOW FULL PROCESSLIST很熟悉,但是我希望能够通过命令行运行它,这样我就可以将它转储到一个文件中并进行处理。
有没有办法将这个查询输出到一个文件,并让它每隔一秒运行一次?
是否有更好的方法来捕获正在运行的所有查询?
请注意,我对慢速查询并不感兴趣(我熟悉慢速查询日志)。
发布于 2012-02-14 16:52:46
我会使用慢速查询日志。如果您设置long_query_time = 0,它将捕获所有查询,而不仅仅是那些缓慢的查询。
它还捕获所有查询,这里提到的TCP嗅探技术并非如此;这些查询不会捕获通过套接字执行的查询。同样用于观看节目PROCESSLIST;您将错过快速运行的查询。
如果您想通过进程列表或TCP流量捕获查询,我建议使用Percona的pt查询摘要。它可以为您轮询处理列表(如果您自己捕获一堆处理列表的示例,这很难理解结果),它可以解释MySQL的TCP协议,因此您可以获取一些TCP流量并对其进行分析。当然,它也是有史以来最好的查询聚合器/分析器/记者,但是在捕获查询之后,您没有说出要对它们做什么。
发布于 2012-02-10 22:41:15
最健壮的方法是使用“通用查询日志”,它将捕获所有查询:http://dev.mysql.com/doc/refman/5.1/en/query-log.html
您没有指定MySQL服务器版本,但是如果您有5.1.12或更高版本,则可以通过SQL使用全局变量启用和禁用该版本;有关详细信息,请参阅文档。
发布于 2012-02-10 22:32:58
当然:
mysqladmin -u root -p -i 1 --verbose processlist > /tmp/pl.out干杯
https://serverfault.com/questions/358978
复制相似问题