특정 사용자에 대한 쿼리 속도가 느림


11

C # .NET 웹 응용 프로그램에서 호출 된 몇 가지 쿼리가 항상 빠릅니다 (SQL Server의 로컬 관리자 임). 사용자 그룹 (필요한 권한이있는 도메인 그룹)의 경우 쿼리 속도가 매우 느립니다. 응용 프로그램에서 시간 초과되는 지점

다른 사용자에 대해 정확히 동일한 쿼리가 다르게 실행되는 이유는 무엇입니까?

더 많은 정보:

  • 쿼리는 저장 프로 시저가 아닌 C # 코드에서 인라인 SQL입니다.
  • 앱은 도메인 인증을 사용하며 사용자와 본인은 모두 앱을 통해 쿼리를 실행합니다.
  • 문제가 다른 계획 인 것 같고 캐시 된 것 같으므로 다른 사용자마다 다른 것 같습니다. 이제 쿼리가 응용 프로그램을 통해 느리고 SQL Server Management Studio에서 빠르기 때문에 캐시에 영향을 미칩니다.

2
다음 질문을 확인하십시오 . 같은 상황에 처해있을 수도 있습니다. 의 첫 번째 시도한다고 가정 해 봅시다 이것이 다른 하나를 .
Marian

3
느린 쿼리에서 대기 유형 (sys.dm_os_waiting_tasks)은 무엇이며, 각각의 실제 실행 계획 (빠른 속도, 느린 속도)은 무엇입니까?
Thomas Stringer

2
이전 의견에 동의하십시오. 내 첫 번째 생각은 매개 변수 스니핑이기도합니다. 계획이 다른지 확인하는 것이 첫 단계입니다.
Martin Smith

4
매개 변수가 동일하면 (의 의미라고 가정 함 exact same query) 매개 변수 스니핑해서는 안됩니다 (사용자는 잘못된 매개 변수에 대한 나쁜 계획을 얻음). 그러나 사용자는 동일한 매개 변수에 대해 다른 계획을 얻습니다. (에스). 빠른 사용자와 느린 사용자 에 대해 비교할 수있는 quoted_identifierand와 같은 설정 때문일 수도 있고 , 서로 다른 기본 스키마가 있고 스키마 접두사없이 객체가 참조되기 때문일 수 있습니다. 매개 변수 스니핑이 여전히 관련 될 수 있습니다 (따라서 그 중 하나의 계획이 잘못된 이유). arithabortsys.dm_exec_sessions
Aaron Bertrand

1
RE : 편집 한 다른 사용자와 동일한 기본 스키마가 있습니까? 느리고 빠른 실행을위한 실행 계획을 아직 포착 했습니까?
Martin Smith

답변:


5

매개 변수가 동일하면 (의 의미라고 가정 함 exact same query) 매개 변수 스니핑해서는 안됩니다 (사용자는 잘못된 매개 변수에 대한 나쁜 계획을 얻음). 그러나 사용자는 동일한 매개 변수에 대해 다른 계획을 얻습니다. (에스). 빠른 사용자와 느린 사용자 에 대해 비교할 수있는 quoted_identifierand와 같은 설정 때문일 수도 있고 , 서로 다른 기본 스키마가 있고 스키마 접두사없이 객체가 참조되기 때문일 수 있습니다. 매개 변수 스니핑이 여전히 관련 될 수 있습니다 (따라서 그 중 하나의 계획이 잘못된 이유).arithabortsys.dm_exec_sessions


3

나는 이것에 대한 두 가지 이유를 보았다 : 1, 매개 변수 스니핑 2, 연결 설정이 다릅니다. whoisactive 를 실행 하면 다른 연결 속성이 표시됩니다. 실제로 이것에 대한 블로그 게시물이 있지만 회사의 특정 정보를 정리하지 않았습니다. (내 블로그를 아직 활성화하지 않았 음);)


0

시도 : 모든 EXEC 및 테이블 참조에 스키마를 지정하십시오. 예 : EXEC dbo.MyProc

Martin Smith가 제안한 것처럼 '동일한 기본 스키마'와 같은 충돌이 있거나 재 컴파일 될 수 있습니다.


0

이것은 SQL Server의 버그 인 것 같습니다. SQL Server 2008에서이 버그가 발생했습니다. 새 버전을 테스트하지 않았습니다. 관리자로 로그인하여이 쿼리를 실행하고 0 초 안에 응답을 얻을 수 있습니다.

select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME

그런 다음 더 적은 권한을 가진 사용자로 로그인하고 똑같은 쿼리를 실행하면 응답에 45 초가 걸립니다.

이것은 계속해서 일관됩니다. 두 쿼리 창 사이에서 관리자와 관리자 이외의 관리자가 서로 바운스하면 관리자가 아닌 사람은 항상 약 45 초가 걸리고 관리자는 0 초가 걸립니다.


질문에 대한 의견에서 묻는 것처럼 두 사용자 모두 동일한 기본 데이터베이스를 가지고 있으며 쿼리가 동일한 데이터베이스에서 실행됩니까? 그리고 이것이 버그이거나 당신의 의견이라고 진술하는 일종의 문서를 가리킬 수 있습니까? 당신이 틀렸다고 말하는 것이 아니라 일화를 넘어서는 무언가를 찾는 것입니다.
RDFozz

답변에서 확인한 문제는 SQL Server 2008에서 반복 할 수없는 것으로 보입니다. select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME명시 적으로 권한이 부여되지 않은 SA 이외의 로그인에 대해서는 즉시 데이터를 일관되게 반환합니다.
Max Vernon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.