C#VS SSMSから同じリクエストを実行すると、異なる実行時間が与えられます


12

このようなリクエストがあります

SELECT 
[EstimateId], 
[CreationUserId], 
[EstimateStatusValueId], 
[LanguageId], 
[LocationId], 
[EstimatorUserId], 
[FilterUnitSystemTypeId], 
[EstimateNumber], 
[RevisionNumber], 
[CreationDate], 
[ModificationDate], 
[ProjectDescription], 
[IsBsdq], 
[ClosingDate], 
[ClosingTime], 
[ClosingUpdatedOn], 
[DeadLineDate], 
[IsReceived], 
[Inclusion], 
[Exclusion], 
[Misc], 
[Note], 
[WorkDeadLines], 
[Comments], 
[Validity], 
[PlansLocation], 
[PlansReceivedFrom], 
[Price]
FROM [Estimate].[Estimates] 
ORDER BY [ClosingDate] ASC, [ClosingTime] ASC

SSMSでこのクエリを実行すると、953msの実行時間が得られますが、C#でLinqクエリからこのクエリを実行すると、1813msの実行時間が得られます。

Linqクエリは「.Net SqlClient Data Provider」を使用し、EntityFramework(EDMXファイル)に対して発行されます。これは問題になる可能性がありますか?

同じデータベースの異なるコンテキストから実行されるリクエストの実行時間に大きな違いがある理由を誰もが知っていますか?

両方の要求のすべての実行計画を検証し、それぞれのクエリを満たすために同じインデックスを使用します。

C#リクエストの実行計画を確認するには、SQLプロファイラーを使用してShow Plan XMLイベントをトラップし、それをSSMSの1つと比較します。両方とも同じです。


ちょっとした質問-検索条件なしですべてのテーブルのデータを選択するのはなぜですか?フィルタリングなしでアプリケーションのすべてのデータが本当に必要ですか?
マリアン

はい、これは必要な機能ですが、この機能はあまり使用されません。where句なしで大きなクエリを発行するのは最適ではないことを知っています。
ニコ

とにかく、私の懸念はリクエスト自体ではなく、実行時間の違いです。このクエリを紹介しますが、すべてのクエリで同様の結果が得られます。どうして ?
ニコ

回答:


6

これは何度も一貫していますか?

コンパイル時間になる可能性のあるCPUの違いが表示されます。これに影響するLINQ設定はありますか?

編集:

  • プロファイラーで計画をキャプチャする
  • プロファイラーで SQLが同じであることは確かですか?

はい、それは何度も一貫しています。linqの設定については知りません。しかし、私はこのリンクcodeproject.com/KB/cs/linqsql2.aspxを
ニコ

両方のクエリについて、上の図のプランを見ることができます。はい、私はプロファイラーでSQLが同じであることを確信しています。SQL、プロファイラー、SSMS、C#アプリはすべて、開発目的のためにコンピューターでホストされています。
ニコ

Profilerから実際の計画をXMLでキャプチャします。キャッシュからではありません。回答は異なりますが、異なる計画を示している=上記の間違った計画を示している可能性があります
-gbn


3

2つのクエリの実行プランを見て、それらがどこで異なるのかを確認します。


私は自分の投稿を編集します...そして、両方のクエリが同じプランを使用していることをすでに確認しています。
ニコ

1
あなたが私に言ったイベントをプロファイラーに追加するだけで、それは質問に投稿した最後のリクエストと同じです。私は同じ計画を得た..他のアイデア
ニコ

2
すべてが正しいように見えます。それを説明できる唯一のことは、.NETアプリケーションがデータを十分に迅速に受信しない場合です。SQL Profilerで報告される時間には、サーバーからクライアントにデータを転送する時間が含まれます。したがって、クライアントがすべてを十分に迅速にダウンロードしない場合、レポートされる実行時間は長くなります。
mrdenny

2
次に、アプリケーションがデータをどのように処理しているか、およびデータベースからデータをどのように読み込んでいるかになります。
-mrdenny

3
mrdennyの回答をサポートするために、3つの異なるSQLクライアントでクエリをテストし、報告された時間はすべて異なりましたが、IO統計とプランの実行は同じでした。それはすべて、クライアントがデータを処理する方法の内部的な方法が原因でした。ファイル、Management Studioのグ​​リッド、またはテキスト出力に出力することで、異なる時間の結果を取得できると考えています。とにかく、私が覚えていることから、ドキュメントはSQLが常にLINQ to SQLよりも高速であると述べたので、これは驚くことではありません:-)。
マリアン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.