잠시 검색 한 후, 나는이 질문에 대한 답을 찾지 못하여 게시하고 비슷한 질문 / 답변이 있는지 사과하기로 결정했습니다.
두 개의 유사하게 설정된 SQL 서버에서 아래 쿼리를 실행할 때 성능에 영향을 미치는 다른 실행 계획이 발생하며 원인을 파악하는 데 도움이 필요합니다.
쿼리 :
SELECT process_id
INTO #temp
FROM revrep_revenue_fact
WHERE process_id = 284
DROP TABLE #temp
서버 A의 실행 계획
서버 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
우리가 시도한 것
실행 계획에서 서버 B 에 TOP이있는 이유는 무엇 입니까? 이 간단한 쿼리 예제에는 실제 문제가 없지만 더 큰 쿼리에서는 TOP에 대한 비용이 상승하고 성능이 저하됩니다. 이를 디버깅하는 데 도움을 주시면 도움이 필요한 추가 정보를 얻을 수 있습니다.
GO
행 수 줄 뒤에 를 넣을 수 있습니까? Top 연산자의 속성도 게시 할 수 있습니까?
TOP
연산자는 0이 아닌 제시SET ROWCOUNT
이전에 해당 연결을 실행 하였다. 실행 후 다시 시도하십시오SET ROWCOUNT 0;
. 또한 게시 한 SQL 버전이 SQL 2008 R2가 아닙니다.SELECT SERVERPROPERTY('ProductVersion');
두 서버에서 실행 하여 실제 SQL Server 버전을 얻습니다.