SQL Server 2005에서 연결된 서버의 테이블을 업데이트하고 로컬 서버의 테이블로 해당 테이블을 조인하는 쿼리를 실행할 때 성능이 느립니다.

기술 자료 번역 기술 자료 번역
기술 자료: 942982 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

영문자와 숫자가 조합된 PIN 코드가 설정된 Bluetooth 장치가 있다면:
  • 연결된 서버의 테이블을 업데이트하고 로컬 서버의 테이블로 해당 테이블을 조인하는 쿼리가 있습니다.
  • 로컬 서버에 Microsoft SQL Server 2005 실행 중입니다.
  • 로컬 서버에서 SQL Server 2005에서 쿼리를 실행합니다.
이 시나리오에서 성능을 Microsoft SQL Server 2000의 같은 쿼리의 성능을 비교할 느립니다. 예를 들어, SQL Server 2000에서 쿼리를 실행하면 쿼리가 마치려면 1초 미만의 걸립니다. 그러나 SQL Server 2005에서 쿼리를 실행할 때 쿼리를 마치려면 약 24 초 걸립니다.

원인

쿼리 테이블에 대한 원격 검색 작업이 연결된 서버에서 수행합니다. 원격 스캔 작업을 SQL Server 2005에서 쿼리를 실행하면 테이블의 모든 행을 검색합니다. 테이블에 많은 행이 있으면 원격 검색 작업을 마치려면 시간이 많이 걸립니다.

그러나 SQL Server 2000에서 쿼리를 실행하면 원격 쿼리 작업이 연결된 서버에서 실행할 쿼리를 제출합니다. 테이블에 많은 행이 있는 경우, 따라서 원격 검색 작업을 짧은 시간에 완료됩니다.

해결 과정

이 문제를 해결하려면 로컬 서버의 테이블에 UNIQUE 제약 조건 또는 PRIMARY KEY 제약 조건을 추가하십시오. JOIN 연산을 사용하여 열의 제약 조건을 추가하십시오.

예를 들어, 다음 4단계 "추가 정보" 섹션에서 언급된 DECLARE 문 업데이트:
DECLARE @t2 table (c1 int primary key, c2 int)

현재 상태

Microsoft는 "본 문서의 정보는 다음의 제품에 적용됩니다." 절에 나열된 Microsoft 제품에서 이 문제를 확인했습니다.

추가 정보

이 문제를 재현하는 방법


참고 다음 단계에서는 SQL Server 2005를 실행하는 두 서버가 있다고 가정합니다. 한 인스턴스 이름을 ServerA\SQL2005 있습니다. 다른 인스턴스 이름을 ServerB\SQL2005 있습니다.
  1. SQL Server 2005 ServerA가 인스턴스에서 SQL Server 관리 Studio에서 데이터베이스를 만들려면 다음 문을 실행하여:
    USE MASTER
    GO
    IF EXISTS (SELECT * FROM sysdatabases where name = 'LinktestTarget')
    	DROP DATABASE LinktestTarget
    GO
    CREATE DATABASE LinktestTarget
    GO
    
    ALTER DATABASE LinktestTarget MODIFY FILE
    (NAME = 'LinktestTarget', SIZE = 200MB)
    GO
    ALTER DATABASE LinktestTarget MODIFY FILE
    (NAME = 'LinktestTarget_log', SIZE = 100MB)
    GO
  2. SQL Server 2005의 ServerB 인스턴스에 관리 Studio에서 연결된 서버를 만들려면 다음 문을 실행하여: @ serverName
    DECLARE @serverName nvarchar(50)
    SET @serverName = @@serverName
    
    IF EXISTS (SELECT * FROM master..sysservers WHERE srvname = 'LS')
    	EXEC master.dbo.sp_dropserver @server=N'LS', @droplogins='droplogins'
    
    EXEC sp_addlinkedserver
        @server = N'LS',
        @srvproduct = N'SQLDB',
        @provider = N'SQLOLEDB',
        @datasrc = N'ServerA\SQL2005',
        @catalog = N'LinktestTarget'
    
    EXEC sp_serveroption N'LS', N'data access', N'true'
    EXEC sp_serveroption N'LS', N'rpc out', N'true'
    EXEC sp_serveroption N'LS', N'rpc', N'true'
    EXEC sp_serveroption N'LS', N'use remote collation', N'true'
    EXEC sp_addlinkedsrvlogin
      @rmtsrvname = N'LS',
      @useself = N'true',
      @locallogin = N'sa'
  3. SQL Server 2005 ServerA가 인스턴스 테이블을 만들려면 다음 문을 실행하고 데이터 50,000 행이 있는 테이블을 채우는:
    USE LinktestTarget
    GO
    CREATE TABLE [T1] (
    	[c1] [int]  NOT NULL,
    	[c2] [int] NOT NULL,
    	[c3] char (4000) NOT NULL,
    	CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED ([c1])
    WITH FILLFACTOR = 80 ON [PRIMARY] 
    ) ON [PRIMARY]
    GO
    SET NOCOUNT ON
    GO
    DECLARE @counter int
    SET @counter = 1
    
    WHILE @counter < 50000
    BEGIN
    	INSERT INTO T1 (c1, c2, c3) VALUES (@counter, @counter,'')
    	SET @counter = @counter + 1
    END
    GO
    UPDATE STATISTICS T1 (PK_t1) WITH FULLSCAN
  4. SQL Server 2005의 ServerB 인스턴스에 다음 문을 실행하십시오. 성능이 느린 표시됩니다.
    DECLARE @t2 table (c1 int, c2 int)
    INSERT INTO @t2 (c1, c2) VALUES (399990, 399990)
     
    UPDATE A
    SET A.c2 = B.c2
    FROM LS.LinktestTarget.dbo.T1 AS A 
    	JOIN @t2 as B on B.c1 = A.c1

속성

기술 자료: 942982 - 마지막 검토: 2007년 10월 23일 화요일 - 수정: 1.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
키워드:?
kbmt kbexpertiseadvanced kbtshoot kbprb KB942982 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com