2011-08-14 3 views
2

私はphp - mysqlを使用するウェブサイトを持っています。私は最も時間がかかるDBクエリを決定したいと思います。プロファイラを使用するように設定されている場合は、QUERYのボトルネックを特定するために他にどのような方法を使用できますか。プロファイラプログラムを経由せずにWebアプリケーションをプロファイルする別の方法は何ですか?

+0

[ランダムに一時停止](http://stackoverflow.com/questions/375913/what-c​​an-i-use-to-profile-c-code-in-linux/378024#378024)を試したことがありますか? ?最も高い割合を占めるクエリは、その割合に従って優先的に表示されます。 –

答えて

1

あなたは、MySQLが遅いクエリのログ記録を有効にすることができます。

スロークエリログは、のように実行して(する以上long_query_time秒かかったすべてのSQL文で構成MySQL 5.1.21)では少なくとも検査対象の行がmin_examined_row_limitである必要がありました。最初のテーブルロックを取得する時間は、実行時間としてカウントされません。 mysqldは、実行された後、すべてのロックが解除された後、スロークエリログに文を書き込みます。そのため、ログの順序は実行順序と異なる場合があります。 long_query_timeのデフォルト値は10

0

この大きな課題であると私はポインタのみのカップルを提案することができます - しかし、私は他の場所SO

まずデシベルクエリをプロファイリングに良好なカバレッジ対象があると確信しています。すべてのRDBMSには長い実行クエリリストが保持されていますMySqlは単一の設定フラグでオンになっています。これは、長い時間を実行するクエリを捕捉します(これは現代のRDBMSには長い時間です)。
また、すべてのRDBMSは、そのレコードセットで実行する時間を返します。 "executequery"という一般的な関数を使用してすべての呼び出しをDNaseにプルすることをお勧めします。その後、SQLを実行してファイルに保存してから後で実行してください。

一般的に低速なクエリはテーブルのデザインが悪く、 。 dbaeがそのクエリをどのように実行するかを教えてくれる - 「テーブルスキャン」は、RDBMSがクエリに合ったテーブルのインデックスを見つけることができないことを示します

次のプロファイリングほとんどの場合、ループのすべての時間を使用しているプログラム、すなわちの部分の実行に費やした時間を見るために使用される用語である、またはDB接続したいように見えるものを

をestablinsing費やした時間はちょうど

0

パフォーマンステストであります各クエリを実行する前後の読み取り時間。これは、データベース抽象クラス/関数を使用すると簡単です。

関連する問題