おそらく正規化は正常ではないジェフ・アトウッドは、「ソフトウェアを流れるすべてのクエリを自動的に測定しているのではないでしょうか?」と述べています。私はそうではありませんが、したいのです。
問題のアプリケーションのいくつかの機能:
- ASP.NET
- MSEnterpriseLibraryデータアクセスアプリケーションブロックに依存するデータアクセス層
- MS SQL Server
おそらく正規化は正常ではないジェフ・アトウッドは、「ソフトウェアを流れるすべてのクエリを自動的に測定しているのではないでしょうか?」と述べています。私はそうではありませんが、したいのです。
問題のアプリケーションのいくつかの機能:
BradによるSQLProfilerの説明に加えて、これをコードで実行する場合は、すべてのデータベース呼び出しを共通のライブラリに集中させる必要があります。そこにタイミングコードを挿入すると、システム内のすべてのクエリにかかる時間がわかります。
データベースへの単一のエントリポイントは、ORMまたはデータベースレイヤーのかなり標準的な機能です。少なくとも、これまでに取り組んだプロジェクトには含まれています。
SQL Profilerは、SQLServerに流れるトラフィックを監視するために使用するツールです。これにより、SQLServerに関する詳細なデータを収集できます。SQL Profilerは、少なくともSQL Server 2000以降(ただし、おそらくそれ以前も)SQLServerとともに配布されています。
強くお勧めします。
この章を見てください。JeffAtwoodと私は、Webサイトのパフォーマンスの最適化について書きました。私たちは多くのことをカバーしていますが、データベースのトレースと最適化についてはたくさんのことがあります :サイトのスピードアップ:8ASP.NETパフォーマンスのヒント
CodePlexのDropthingsプロジェクトには、コードのタイミングブロック用のクラスがあります。クラスの名前はTimedLogです。IDisposableを実装します。時間を計りたいコードのブロックをusingステートメントでラップします。
Rails を使用すると、すべての SQL クエリと実行にかかった時間が開発ログ ファイルに自動的に記録されます。
しばらく時間がかかっているものを見つけた場合、画面/ログファイルから直接コピーして貼り付け、mysql でその前に「explain」を配置するのが 1 つのステップであるため、これは非常に便利です。
コードを掘り下げて、何が起こっているかを再構築する必要はありません。
言うまでもなく、これは本番環境では発生しません。約 1 時間でディスク容量が不足するからです。
SqlCommand を作成するファクトリを定義し、新しいコマンドが必要なときに常にそれを呼び出す場合、RealProxyを SqlCommand に返すことができます。
このプロキシは、StopWatch を使用して ExecuteReader / ExecuteScalar などにかかる時間を測定し、どこかに記録できます。Sql Server Profiler よりもこの種の方法を使用する利点は、実行された SQL の各部分の完全なスタック トレースを取得できることです。