SQL 실행 계획에서 TOP 작업이 필요한 이유


9

잠시 검색 한 후, 나는이 질문에 대한 답을 찾지 못하여 게시하고 비슷한 질문 / 답변이 있는지 사과하기로 결정했습니다.

두 개의 유사하게 설정된 SQL 서버에서 아래 쿼리를 실행할 때 성능에 영향을 미치는 다른 실행 계획이 발생하며 원인을 파악하는 데 도움이 필요합니다.

쿼리 :

SELECT process_id
INTO #temp
FROM revrep_revenue_fact
WHERE process_id = 284 
DROP TABLE #temp

서버 A의 실행 계획 서버 B

서버 B 서버 B 의 실행 계획 http://s2.postimg.org/z9fjrfv4n/server_B.png

서버 B는 실제 실행 계획에서 TOP 물리적 작업을 수행하고 있으며 그 이유를 파악하려고합니다. 두 쿼리 모두 인덱스 검색에서 동일한 인덱스를 사용합니다.

서버 A와 서버 B에 대한 자세한 내용은 다음과 같습니다.

서버 A와 B는 모두

Windows Server 2008 R2 표준 서비스 팩 1

24GB RAM

64 비트 운영 체제

( SELECT SERVERPROPERTY ( 'ProductVersion') ) 을 사용하여 얻은 SQL Server 2012 버전

서버 A SQL 버전 11.0.3000.0

서버 B SQL 버전 11.0.5058.0

우리가 시도한 것

  1. 프로 시저 캐시 지우기
  2. 인덱스 재 구축
  3. 통계 새로 고침
  4. 행 수 0 설정 행 개수와 함께

실행 계획에서 서버 B 에 TOP이있는 이유는 무엇 입니까? 이 간단한 쿼리 예제에는 실제 문제가 없지만 더 큰 쿼리에서는 TOP에 대한 비용이 상승하고 성능이 저하됩니다. 이를 디버깅하는 데 도움을 주시면 도움이 필요한 추가 정보를 얻을 수 있습니다.


TOP연산자는 0이 아닌 제시 SET ROWCOUNT이전에 해당 연결을 실행 하였다. 실행 후 다시 시도하십시오 SET ROWCOUNT 0;. 또한 게시 한 SQL 버전이 SQL 2008 R2가 아닙니다. SELECT SERVERPROPERTY('ProductVersion');두 서버에서 실행 하여 실제 SQL Server 버전을 얻습니다.
Dan Guzman

제공된 선택 쿼리를 사용하여 원래 게시물을 SQL 버전으로 업데이트했습니다. SQL이 설치된 서버는 Windows 2008 R2 서버이고 설치된 SQL 서버는 2012입니다. 다른 구성원이 이전에 제안한 다음 삭제 했으므로 실행 계획을 변경하지 않고 ROWCOUNT를 0으로 설정하려고했습니다. 업데이트 된 질문보기
Arthur Yegiazaryan

GO행 수 줄 뒤에 를 넣을 수 있습니까? Top 연산자의 속성도 게시 할 수 있습니까?
Rob Farley

Rob, TOP에서 원래 게시물에 GO 및 속성 추가
Arthur Yegiazaryan

답변:


12

두 서버에서 데이터베이스 호환성 레벨이 동일한 지 확인하십시오. SQL Server 2012 인스턴스에서 빠른 테스트를 실행했으며 호환성 수준이 100 이하인 경우 TOP 연산자가 도입되었습니다. 특별한 이유가없는 한, SQL Server 2012 인스턴스에서 110 (SQL Server 2012) 호환성 수준을 사용하는 것이 가장 좋습니다.


2

ROWCOUNT에 대한 가치가 있다고 생각합니다. 하다:

SET ROWCOUNT 0

... 끄기 위해.


1
SET ROWCOUNT 0 실행 계획에서 TOP 제거하지 않았다
아서 Yegiazaryan

1
@Arthur 그것은 귀하의 경우 해결책이 아니지만, 미래 독자의 행동의 이유 일 수 있습니다. (죄송합니다. Rob, 게시물을 삭제하지 않을 수도 있습니다. 왜냐하면 이것이 동일한 증상의 문제 일 수 있기 때문입니다.)
Aaron Bertrand

애런, 동의하고 다시 가져 주셔서 감사합니다. 나에게는 해결책이 아니라 다른 사람들을위한 해결책이 될 수 있습니다.
Arthur Yegiazaryan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.