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 데이터 공급자"를 사용하며 EntityFramework (EDMX 파일)에 대해 발행됩니다. 이것이 문제가 될 수 있습니까?

아무도 같은 요청이지만 동일한 데이터베이스에 대해 다른 컨텍스트에서 실행되는 요청의 실행 시간 사이에 왜 큰 차이가 있는지 아는 사람이 있습니까?

두 요청의 모든 실행 계획을 확인했으며 동일한 인덱스를 사용하여 해당 쿼리를 충족시킵니다.

C # 요청의 실행 계획을 보려면 SQL 프로파일 러를 사용하여 Show Plan XML 이벤트를 트랩하고 SSMS 중 하나와 비교하면 둘 다 동일합니다.


작은 질문-왜 검색 조건없이 모든 테이블의 데이터를 선택합니까? 필터링없이 응용 프로그램의 모든 데이터가 실제로 필요합니까?
Marian

예, 이것이 필요한 기능이지만이 기능은 자주 사용되지 않습니다. where 절없이 큰 쿼리를 발행하는 것이 최적이 아니라는 것을 알고 있습니다.
Nico

어쨌든 내 관심사는 요청 자체가 아니라 실행 시간의 차이입니다. 이 쿼리를 보여 주지만 모든 쿼리는 비슷한 결과를 제공합니다. 왜 ?
Nico

답변:


6

이것이 일관성이 있습니까?

컴파일 시간이 될 수있는 CPU 차이를 봅니다. 이에 영향을주는 LINQ 설정이 있습니까?

편집하다:

  • 프로파일 러에서 계획을 캡처하십시오.
  • SQL이 프로파일 러 에서 동일 합니까?

그렇습니다. linq 설정을 모르겠습니다. 하지만이 링크를 발견했습니다 codeproject.com/KB/cs/linqsql2.aspx
Nico

두 쿼리 모두 위의 계획을 그림에서 볼 수 있습니다. 예, 프로파일 러에서 SQL이 동일하다고 확신합니다. SQL, Profiler, SSMS 및 C # 앱은 모두 개발 목적으로 내 컴퓨터에 호스팅됩니다.
Nico

Profiler에서 XML로 실제 계획 을 캡처하십시오 . 캐시가 아닙니다. 응답이 다르지만 위에 표시된 다른 계획 = 잘못된 계획 일 수 있음
gbn


3

두 쿼리에 대한 실행 계획을보고 서로 다른 위치를 확인하려고합니다.


방금 게시물을 편집하고 두 쿼리 모두 동일한 계획을 사용하는지 확인합니다.
Nico

1
방금 말한 이벤트를 프로파일 러에 추가하면 내 질문에 게시 한 마지막 요청과 동일합니다. 나는 같은 계획을 가지고 있습니다. 다른 아이디어 ...
Nico

2
모든 것이 올바르게 보입니다. .NET 응용 프로그램이 데이터를 충분히 빨리받지 못하면 설명 할 수 있습니다. SQL 프로파일 러에보고 된 시간에는 서버에서 클라이언트로 데이터를 전송하는 시간이 포함됩니다. 따라서 클라이언트가 모든 것을 빠르게 다운로드하지 않으면보고 된 런타임이 더 길어집니다.
mrdenny

2
그런 다음 응용 프로그램이 데이터로 수행하는 작업과 데이터베이스에서 데이터를 읽는 방법에 대해 설명합니다.
mrdenny

3
mrdenny의 답변을 지원하기 위해 3 개의 다른 SQL 클라이언트에서 쿼리를 테스트했으며 IO 통계와 계획이 동일하더라도보고 된 시간은 모두 다르다고 덧붙였습니다. 클라이언트가 데이터를 처리하는 방식의 내부 방식 때문입니다. 파일, Management Studio의 그리드 또는 텍스트 출력으로 출력하여 다른 시간 결과를 얻을 수 있다고 생각합니다. 어쨌든, 내가 기억하는 것에서 문서는 SQL이 항상 LINQ보다 SQL보다 빠를 것이라고 말 했으므로 놀라운 것은 아닙니다 :-).
Marian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.