Linq to SQLを使用するときにSQLクエリを実行する良い方法はありますか?私は本当にログ機能が好きですが、どういうわけかそのクエリーの時間を計ることができれば素晴らしいでしょう。何か案は?Linq to SQLを使用するときにSQLクエリを実行する良い方法
答えて
クエリと時間を取得するためのSQLプロファイラと、クエリアナライザの実行パスを使用して、ボトルネックがどこにあるかを確認します。
SQLプロファイラを使用して、LLBLGen Proでクエリをテストします。
System.Diagnostics.Stopwatch
を使用すると、クエリの実行時間を追跡できます。 Linq-> SQLクエリは、それらを列挙するまで実行されません。また、Console.Out
にログを記録している場合、パフォーマンスが大幅に低下することに注意してください。
ベストは、クエリをファイルに記録することです。SQLプロファイラを使用してクエリを実行し、クエリのインデックスを微調整します。
すでに2人が言っているように、SQLプロファイラはそのために使用するためのすぐ使えるツールです。私はエコーになりたくはありませんが、もう少し詳しく説明したいと思います:SQL Serverからの実際のタイミングを提供するだけでなく(ネットワーク側の入出力、接続と接続プールタイミングがケーキに追加されますが、I/O統計情報、ロック情報(必要に応じて)なども表示されます。
I/O統計情報が重要な理由は、クエリは、サーバーリソースの過剰な量を消費しながら高速に実行される可能性があります。たとえば、実行されるクエリが大規模なテーブルを頻繁にヒットし、一致するインデックスがテーブルスキャンの結果として存在しない場合、影響を受けるテーブルはSQL Serverによってメモリにキャッシュされます(可能な場合)。これにより、同じクエリが驚異的に速く実行されることがありますが、サーバーリソースを枯渇させてシステム/ app/dbの残りの部分を害することがあります。
ロック情報はほとんど同じくらい重要です - 単一のレコードの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
あなたができることは、生成されたsqlをファイルまたはメモリに書き込むDataContext.LogにカスタムTextWriter実装を追加することです。その後、これらのクエリをループし、生のADO.NETコードでそれらを実行し、それぞれをストップウォッチで囲みます。
Profilerが公開されていないコードを開発していたときに見えたので、これまで同様の手法を使用していましたが、その結果をHTMLページに出力するのは簡単でした。 Webサイトのリクエストごとに2回実行しますが、Profilerで何かをキャッチするまで待つのではなく、実行時間を早めるのが役に立ちます。
また、SQLツールのルートに行く場合は、私はグーグル "最速のクエリのDMV"をお勧めし、DBの中で最も遅いクエリの統計情報を与えることができるストアドプロシージャを取得します。プロファイラの結果をスクロールして悪いクエリを見つけるのは必ずしも容易ではありません。また、SQL 2005のdmvを介した適切なクエリでは、CPUと時間などを指定して順序付けを行うこともできます。
- 1. LINQ-to-SQLを使用してsysテーブルにクエリを実行する方法は?
- 2. Linq-to-SQL非実行クエリ
- 3. LINQ to SQLでは、maxを使用してサブクエリを実行する方法は?
- 4. LINQ to SQLを使用して更新/セットを実行する
- 5. Linq to Entityを使用したSQLクエリ
- 6. linq to SQLクエリーを使用したクエリ
- 7. Linq-to-SQLはいつクエリを実行しますか?
- 8. LINQ to SQLのSQLクエリ
- 9. Linq to SQLにこのSQLクエリを書く方法
- 10. LINQ to SQLクエリを逆にする方法
- 11. LINQ-to-SQLクエリを最適にマージする方法
- 12. LINQオブジェクト内からLINQ to SQLクエリを実行できますか?
- 13. LINQ-to-SQLクエリはいつ実行されますか?
- 14. LINQ to SQLクエリを作成するヘルプ
- 15. Linq-To-SQLを使用して同じクエリでTOP、ORDER BY、およびDISTINCTを実行する方法は?
- 16. Linq-to-SQLを使用するADO.NETデータサービス
- 17. LINQ to SQLクエリのポストバックでorderbyを変更する方法
- 18. LINQ to Entitiesを使用してT-SQLクエリを実行するにはどうすればよいですか?
- 19. Linq-to-SQLで述語検索を使用する方法
- 20. SQL Azureを使用したLINQ to SQL
- 21. 並行処理とトランザクションをサポートするLinq-to-Sqlカウンタキャッシュの実装方法は?
- 22. LINQ to SQLはDataContextの後にクエリを使用します。
- 23. LINQ to SQLとLINQ to DataSet
- 24. 'IN'とワイルドカードシナリオで動作するLINQ to SQLクエリを取得する方法
- 25. linq to sqlとHtmlEncodeを使用
- 26. LINQのString.IsNullOrEmpty To SQLクエリ?
- 27. Linq to SQlクエリのパフォーマンス
- 28. LINQ to SQL - クエリで悩む
- 29. LINQ to SQLクエリの問題
- 30. LINQ to SQLを参照しているときにSQLを複製する
可能な限り自動方法を探しています。 StopWatchを使用するすべてのクエリを処理することはできますが、それは多くの作業です。 –