3

데이터 액세스 응용 프로그램 블록을 호출 할 때 속도가 매우 느려집니다.DatabaseInstance.ExecuteSprocAccessor <T> (...) 호출이 왜 그렇게 간단한 쿼리를 수행하는 데 시간이 오래 걸립니까?

SP에 ("QuestionsToBeAnswered")이 반환에게 세 개의 열 58 행 호출입니다 (이 GUID가 및 정수 : 21AF77DA-2E76-47DB-AB54-0E5C85CD9AD8, 21AF77DA-2E76-47DB-AB54-0E5C85CD9AF0, 2) 이내에 서버에서 직접 실행될 때 1 초 이상. 제 SQL 경험은 꽤 좋았습니다. SQL 서버에 문제가 존재하지 않는다고 확신합니다.

그러나 DAAB을 통해 호출 될 때 개체 컬렉션을 반환하는 데 시간이 오래 걸립니다. ExecuteSprocAccessor (...)는 일반적으로 IEnumerable을 반환하며 SP는 컬렉션이 열거되거나 소비 될 때까지 실행되지 않으므로 소비가 발생할 때까지이 문제가 표시되지 않습니다.

DatabaseInstance.ExecuteSprocAccessor<T>(storedProcedure, rowMapper, args); 

이 동일한 코드가 반환 문제> 훨씬 더 복잡한 정보의 200 개 행이 없음을 감안할 때,이 코드는 너무 오래 걸리는 이유에 당황하고 (55초를!)을 실행 할 수 있습니다.

모든 아이디어를 환영 할 것이다 ...

+0

저장 프로 시저 실행 계획을 다시 컴파일 해보십시오. – Jack

+0

@Jack이 문제의 일부로 SP를 다시 설계 했으므로 (실행 시간이 1 초 미만으로 크게 단축되었지만) 결과가 1 분 정도 걸리는 클래스의 인구입니다. 생각해 줘서 고마워! –

+0

나는 단지 다음과 같이 확인하고 싶다 :이 쿼리는 항상 ssms에서 빠르지 만, daab에서는 항상 느리다. 권리? –

답변

0

당신은 실제 통화가 DAAB를 사용하여 실행할 때 어떻게 생겼는지보고 SQL 프로파일 러를 실행 시도 할 수 있습니다. 이를 사용하여 사용중인 실행 계획을 살펴보십시오.

이전에는 SQL 쿼리로 잘 돌아가지만 실제로는 저장 프로 시저로 느린 코드를 작성했습니다. 쿼리 최적화 프로그램이 SQL 쿼리와 저장 프로 시저에 대해 다른 실행 계획을 사용하는 일부 중복 인덱스에 영향을 미칩니다. 정렬 된 인덱스를 얻은 후 둘 다 동일한 빠른 속도로 실행됩니다.