0

MySQL には非常に長く、複数のSELECT, INSERT, andUPDATEステートメントがあり、いくつかIFの とが含まれるルーチンがありますREPEAT。最近まで問題なく実行されていましたが、完了するまでに 20 秒以上かかっていました (以前は 1 秒ほどかかっていたことを考えると、これは受け入れられません)。

ボトルネックがルーチンのどこから来ているかを見つけるための最も迅速で簡単な方法は何ですか? 基本的に、ルーチンは停止しており、ある時点で...ルーチンを分解して各セクションを1つずつテストせずに、どこにあるのかを見つけるにはどうすればよいですか?

4

2 に答える 2

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のどのセクションに最も時間がかかったかを確認できます。

于 2013-01-11T02:15:17.807 に答える
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

于 2013-01-11T02:18:04.300 に答える