如何在我的慢MySQL例程(存储过程)中找到瓶颈?

时间:2013-01-11 02:06:20

标签: mysql sql performance stored-procedures

我在MySQL中有一个非常长的例程,其中包含多个SELECTINSERTUPDATE语句,其中包含一些IF和{{1} }秒。它一直运行良好,直到最近,它需要花费超过20秒的时间来完成(考虑到过去1秒左右,这是不可接受的)。

最简单,最简单的方法是找出瓶颈的常规来源?基本上这个例程正在停止并且有一点......如何在不拆分例程并逐个测试每个部分的情况下找出它的位置?

2 个答案:

答案 0 :(得分:0)

如果您使用Percona Server(具有许多增强功能的MySQL的免费分发),您可以使用log_slow_sp_statements配置变量为单个查询创建慢查询日志记录时间。见http://www.percona.com/doc/percona-server/5.5/diagnostics/slow_extended_55.html

如果您正在使用库存MySQL,则可以在存储过程中添加语句,以将一系列会话变量设置为SYSDATE()函数返回的值。在SP中的不同点使用不同的会话变量。然后,在测试执行中运行SP后,您可以检查这些会话变量的值,以查看SP的哪个部分花费的时间最长。

答案 1 :(得分:0)

分析查询可以看到相同的执行计划。这并不总是一项容易的任务,但通过一些阅读将找到解决方案。我留下了一些有用的链接

http://dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html

http://dev.mysql.com/doc/refman/5.0/en/explain.html

http://dev.mysql.com/doc/refman/5.0/en/using-explain.html

http://www.lornajane.net/posts/2011/explaining-mysqls-explain