测量实际的MySQL查询时间


79

如何测量查询的执行时间而不测量等待锁释放等的时间?我唯一的想法是连续测量相同的查询并记录最快的时间。

Answers:


149

使用启动分析器

SET profiling = 1;

然后执行查询。

SHOW PROFILES;

您会看到分析器具有统计信息的查询列表。最后,您选择要查询的查询

SHOW PROFILE FOR QUERY 1;

或您查询的任何数字。

您得到的是一个列表,其中精确列出了查询期间花费了多少时间。

手册中的更多信息


太好了!你知道这很慢吗?即我可以将其添加到我的包装器类中,以对在我的网站上运行的每个查询执行吗?
米哈伊尔(Mikhail)2012年

3
从来没有想过。你为什么想这么做?我猜通常这只是为了发展。如果您想知道哪些查询比较慢,请查看您的slow-query-log。dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
的FancyPants

因为查询对不同的用户花费的时间不同。slow-query-log似乎在计算它等待锁定释放的时间
Mikhail

1
不是真的 等待锁定也只是另一个查询变慢的征兆。我建议在您的慢速查询日志中选择查询,并使用事件探查器运行它们,以了解它们在哪里花费了很多时间。然后,如有可能,对其进行改进。如果查询花费大量时间,则相应地添加索引,重写索引或减少读取的数据sending data。或提高性能所需的一切。让用户知道为什么要等待这么长时间没有任何意义。他们实际上不在乎。
fancyPants 2012年

我不是要向用户显示概要分析的结果。我只是想为自己的目的对其进行现场存储和存储
Mikhail

37

接受的答案变得无效...

SHOW PROFILE[S]弃用的MySQL 5.6.7的,并会在将来的MySQL版本中删除。改用性能模式;参见http://dev.mysql.com/doc/refman/5.6/en/performance-schema-query-profiling.html


2
如果Profile向您提供了比“发送数据”更有用的东西,那么您中奖了。
瑞克·詹姆斯

1
我正在使用5.7.19,但仍能show profiles正常工作
Siva Praveen

1
@SivaPraveen-好,现在它仍然可以使用,但是“ ...将被删除...”
Rick James
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.