2013-01-11 50 views
0

我在MySQL中有一個很長的例程,它有多個SELECTINSERTUPDATE語句,其中有一些IFREPEAT s。它一直運行良好,直到最近,它花了超過20秒才完成(考慮到它過去需要1秒左右,這是不可接受的)。如何找到緩慢的MySQL例程(存儲過程)中的瓶頸?

什麼是最快最容易找到瓶頸來自哪裏的常規方法?基本上,這個例程已經停止了,並且有一點......我怎麼能找出那裏沒有破壞例行程序並逐個測試每個部分?

回答

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中哪一部分花費的時間最長。