증상
다음 시나리오를 고려하십시오.
-
연결된 된 서버는 로컬 서버와 Microsoft SQL Server 2012 인스턴스를 갖추고 원격 서버 간에 구성 되어 있습니다.
-
로컬 서버는 같은 대/소문자 구분 데이터 정렬 한 데이터 정렬을 사용 하 여 구성 됩니다.
-
원격 서버에는 다른 데이터 정렬을 대/소문자 구분 데이터 정렬 등 로컬 서버에 구성 된 개체입니다.
-
연결이 만들어질 Microsoft JDBC 드라이버에서 SQL Server 대 한 Microsoft ODBC 드라이버가 SQL Server, SQL OLE DB 공급자 또는 SQL Native Client에 대 한 로컬 서버에 있습니다.
-
드라이버는 로컬 서버에서 sp_prepexec 저장 프로시저를 호출 하는 준비 된 문으로 Transact SQL 업데이트 쿼리를 실행 합니다.
-
쿼리에서 원격 서버의 테이블을 업데이트합니다. 로컬 서버에서 다른 데이터 정렬을 사용 하 여 열 개체를 포함 합니다.
이 시나리오에서 쿼리 실행의 성능 저하를 발생할 수 있습니다. 업데이트 쿼리의 실행 계획을 선택 하면 필터링 없이 원격 서버에 있는 테이블에 원격 검색 수행 됩니다 볼 수 있습니다. 따라서 쿼리는 원격 테이블을 스캔 하 고 다음 로컬 서버에 있는 모든 행을 검색 하는 경우 많은 읽기를 수행할 수 있습니다.
예를 들어, 기본 대/소문자 구분 데이터 정렬을 가진 로컬 서버에는 쿼리를 준비 하 고 원격 서버는 대 소문자를 구분 하는 열이 포함 된 T1 테이블에. 이 업데이트는 t 1의 모든 행을 검사 합니다.
DECLARE @p1 INTEXEC sp_prepexec @p1 output, N'@P0 NVARCHAR(16), @P1 NVARCHAR(16)',
N'UPDATE RemoteServer.RemoteDatabase.dbo.T1 SET COL1=@P0 WHERE COL2=@P1',
N'a', N'a'
SELECT @p1
원인
준비 된 업데이트 쿼리 서버 데이터 정렬이 일치 하지 않는 경우 원격 테이블 스캔은 문제가 발생 합니다.
해결 방법
핫픽스를 적용 한 후 추적 플래그 4199에 연결된 된 서버를 호스트 하는 로컬 서버를 사용 해야 합니다. 방법은 traceflag를 사용 하도록 설정 하려면 추가 정보 절을 참조 하십시오.
참고: 핫픽스는 연결된 된 서버를 호스트 하 고 준비 된 문을 최적화 하는 로컬 서버에만 적용 됩니다. 이 핫픽스는 원격 서버에는 적용 되지 않습니다.
문제는 SQL Server 다음 누적 업데이트에 처음 수정 되었습니다.
SQL Server 2012 s p 1 용 누적 업데이트 6/en-us/help/2874879
SQL Server용 각각의 새로운 누적 업데이트는 모이전 누적 업데이트에 포함된 모든 핫픽스 및 보안 수정 프로그램을 포함합니다. SQL Server에 대한 최신 누적 업데이트를 확인해 보십시오.
핫픽스 정보지원되는 핫픽스를 Microsoft에서 구할 수 있습니다. 그러나 이 핫픽스는 오직 이 문서에서 설명하는 문제를 해결하는 작업에만 사용됩니다. 이 문제가 발생하는 시스템에만 이 핫픽스를 적용해야 합니다.
핫픽스를 다운로드할 수 있는 경우, 이 기술 자료 문서의 상단에 "핫픽스 다운로드 가능" 섹션이 있습니다. 이 섹션이 표시 되지 않으면 Microsoft 고객 서비스 및 지원 핫픽스를 구하는 요청을 제출 합니다.
참고: 추가 문제가 발생하거나 문제 해결이 필요한 경우, 별도로 서비스를 요청해야 할 수도 있습니다. 추가 지원 질문과 이 특정 핫픽스가 필요하지 않은 문제에는 일반 지원 비용이 적용됩니다. 전체 목록은 Microsoft 고객 서비스 및 지원 전화 번호 또는 별도 서비스 요청을 만들려면, 다음 Microsoft 웹 사이트를 방문 하십시오.
http://support.microsoft.com/contactus/?ws=support참고: "핫픽스 다운로드 사용 가능" 형식은 핫픽스 사용이 가능한 언어를 표시합니다. 사용자 언어가 표시되지 않는 것은 핫픽스를 해당 언어로 사용할 수 없기 때문입니다.
전제 조건이 핫픽스를 적용 하려면 SQL Server 2012가 설치 되어 있어야 합니다.
레지스트리 정보이 핫픽스를 적용 한 후에 레지스트리를 변경할 필요가 없습니다.
핫픽스 대체 정보이 핫픽스는 다른 핫픽스를 대체하지 않습니다.
상태
Microsoft는 이 문제가 '적용 대상' 섹션에 나열된 Microsoft 제품의 문제임을 확인했습니다.
해결 방법
작동 하도록 다음 방법 중 하나를 사용 하십시오 문제가 많습니다.
-
클라이언트 응용 프로그램의 소스 코드에서 준비 된 문을 사용 하지 마십시오. 대신 사용할 수 있습니다 임시 문 또는 저장된 프로시저 처럼 호출 가능한 문을 드라이버 인터페이스를 지 원하는 경우.
-
두 서버에서 일치 하는 데이터 정렬을 사용 합니다.
자세한 내용
추적 플래그를 활성화 하려면 시작 매개 변수를 추가 합니다. -T4199 또는 DBCC TRACEON(4199,-1) 동작이 가능 하도록 준비 된 문을 컴파일 전에.
추적 플래그를 설정 하려면 다음 방법 중 하나를 사용할 수 있습니다.
-
SQL Server 시작 하기 전에 Microsoft SQL Server 구성 관리자를 사용 하 여 해당된 인스턴스를 마우스 오른쪽 단추로 클릭 시작 매개 변수를 추가 합니다. -T4199 다시 시작 하 고 모든 연결 인스턴스를 통해 나중에 유지 되도록 합니다.
-
동적으로 런타임에 서비스 시작을 가져옵니다 및 모든 연결 "(-1)에 대 한 전역 설정을 사용 하도록 설정 합니다." 설정 또는 해제 스위치를 사용 하 여 테스트를 수행 하려는 경우 프로시저 캐시를 해제 해야 합니다.
설정을 활성화 하려면 다음을 사용 하 여 전체적으로, 동적으로.
DBCC TRACEON(4199,-1)DBCC TRACESTATUS(-1)
DBCC FREEPROCCACHE
설정을 해제 하려면 다음을 사용 하 여 전체적으로, 동적으로.
DBCC TRACEOFF(4199,-1)DBCC TRACESTATUS(-1)
DBCC FREEPROCCACHE