6

Linq to SQL を使用するときに SQL クエリのタイミングを計る良い方法はありますか? 私はロギング機能がとても気に入っていますが、何らかの方法でそのクエリの時間を計ることもできれば素晴らしいと思います. 何か案は?

4

6 に答える 6

9

2 人が既に言ったように、SQL プロファイラーはそのために使用するすぐに使えるツールです。私はエコーになりたくありませんが、もう少し詳しく説明したいと思います: SQL Server からの実際のタイミングを提供するだけでなく (ネットワーク i/o、接続、および接続が行われるアプリ側からのタイミングとは対照的に)プールのタイミングがケーキに追加されます) が、[多くの場合、より重要な] I/O 統計値、ロック情報 (必要に応じて) なども提供します。

I/O 統計が重要な理由は、非常にコストのかかるクエリが高速に実行され、サーバー リソースが過剰に消費される可能性があるためです。たとえば、実行されるクエリが頻繁に大きなテーブルにヒットし、テーブル スキャンの結果に一致するインデックスがない場合、影響を受けるテーブルは SQL Server によってメモリにキャッシュされます (可能な場合)。これにより、同じクエリが非常に高速に実行されることがありますが、実際には、サーバー リソースを消費してシステム/アプリ/データベースの残りの部分に悪影響を及ぼします。

ロック情報はほぼ同じくらい重要です -> 単一のレコードに対して PK ルックアップを行う小さなクエリは、ロックとブロッキングのためにタイミングが悪くなる可能性があります。私はどこかで、このサイトがベータ版の初期にデッドロックに悩まされていたことを読みました。SQL プロファイラは、ロックによって引き起こされる問題を特定して解決するための友達でもあります。

要約すると; L2S、EF、プレーン ADO のいずれを使用する場合でも、アプリケーションがデータベースに対して「適切に動作する」ことを確認したい場合は、開発およびテスト中に常に SQL プロファイラーを用意してください。それは報われます!

編集:上記の回答を書いたので、L2S 用の新しいランタイム プロファイリング ツールを開発しました。SQL Server からの I/O 統計情報とサーバー側のタイミング、SQL Server 実行計画、SQL Server の "インデックスが見つかりません" アラートをマネージ コール スタックと組み合わせて、特定のクエリを生成したコードを簡単に見つけられるようにし、いくつかの高度なフィルター オプションを提供します。特定の基準を満たすクエリのみをログに記録します。さらに、ロギング コンポーネントをアプリと共に配布して、実際の顧客環境でのランタイム クエリ プロファイリングを容易にすることができます。ツールは次の場所からダウンロードできます。

http://www.huagati.com/L2SProfiler/では、45 日間の無料試用ライセンスも入手できます。

ツールの詳細な背景説明と紹介もここに掲載されています:
http://huagati.blogspot.com/2009/06/profiling-linq-to-sql-applications.html

...そして、より高度なフィルター オプションのいくつかを使用するサンプル/ウォークスルーは、ここで入手できます:
http://huagati.blogspot.com/2009/08/walkthrough-of-newest-filters-and.html

于 2008-09-17T03:29:17.263 に答える
5

クエリと時間を取得するための SQL プロファイラーと、ボトルネックがどこにあるかを確認するためのクエリ アナライザーの実行パス。

于 2008-09-17T03:33:17.863 に答える
2

を使用するSystem.Diagnostics.Stopwatchと、クエリの実行時間を追跡できます。Linq->SQL クエリは、列挙するまで実行されないことに注意してください。Console.Outまた、ログインしている場合は、パフォーマンスが大幅に低下することにも注意してください。

于 2008-09-16T19:56:05.793 に答える
1

あなたができることは、生成されたSQLをファイルまたはメモリに書き込むカスタムTextWriter実装をDataContext.Logに追加することです。次に、これらのクエリをループし、生の ADO.NET コードを使用して実行し、それぞれをストップウォッチで囲みます。

コードを開発しているときはいつでもプロファイラーを開いたことがないように思えたので、以前に同様の手法を使用したことがあり、それらの結果を HTML ページに出力するのは非常に簡単でした。Web サイトのリクエストごとに 2 回実行することは確かですが、Profiler で何かをキャッチするまで待つのではなく、できるだけ早く実行時間を確認することをお勧めします。

また、SQL ツール ルートに行く場合は、「最も遅いクエリ DMV」をグーグルで検索し、データベースで最も遅いクエリの統計を取得できるストアド プロシージャを取得することをお勧めします。プロファイラーの結果をスクロールして不適切なクエリを見つけるのは必ずしも簡単ではありません。また、SQL 2005 の dmv を介した適切なクエリを使用すると、CPU と時間などで順序付けを行うこともできます。

于 2009-01-16T19:33:28.323 に答える
0

SQL プロファイラーを使用して、LLBLGen Pro でクエリをテストします。

于 2008-09-16T19:53:27.967 に答える
0

最善の方法は、クエリをファイルに記録し、SQL プロファイラーを使用してクエリの時間を計り、クエリのインデックスを微調整することです。

于 2008-09-16T19:59:56.923 に答える