매개 변수가 있는 필터 - 미리 계산된 파티션에 최적화

적용 대상:SQL Server

사전 계산 파티션을 필터링된 병합 게시에 사용하여 성능을 최적화할 수 있습니다. 미리 계산된 파티션은 필터링된 게시에서 논리 레코드를 사용하기 위한 요구 사항이기도 합니다. 논리적 레코드에 대한 자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화를 참조하세요.

구독자가 게시자와 동기화되면 게시자는 구독자의 필터를 평가하여 그 구독자의 파티션이나 데이터 집합에 속하는 행을 확인해야 합니다. 필터링된 데이터 세트를 수신하는 각 구독자에 대해 게시자에서 변경 내용의 파티션 멤버 자격을 확인하는 이 프로세스를 파티션 평가라고 합니다. 사전 계산 파티션을 사용하지 않을 경우 특정 구독자에 대해 병합 에이전트를 마지막으로 실행한 이후에 게시자에서 필터링된 열의 각 변경 내용에 대해 파티션 평가를 수행해야 합니다. 게시자와 동기화하는 모든 구독자에 대해 이 프로세스를 반복합니다.

그러나 게시자 및 구독자가 Microsoft SQL Server 2005(9.x) 이상 버전에서 실행 중이고 사전 계산 파티션을 사용하는 경우 게시자의 모든 변경 내용에 대한 파티션 멤버 자격은 사전 계산되고 변경이 이루어질 때 유지됩니다. 따라서 구독자가 게시자와 동기화되면 파티션 평가 프로세스를 거치지 않고도 해당 파티션과 관련된 변경 내용을 즉시 다운로드할 수 있습니다. 이렇게 하면 게시에 많은 변경 내용, 구독자 또는 아티클이 있는 경우 성능이 크게 향상됩니다.

사전 계산 파티션을 사용하는 것 외에도 스냅샷 미리 생성하거나 구독자가 처음 동기화할 때 스냅샷 생성 및 애플리케이션을 요청하도록 허용합니다. 이러한 옵션 중 하나 또는 둘 다를 사용하여 매개 변수가 있는 필터를 사용하는 게시에 대한 스냅샷 제공합니다. 이러한 옵션 중 하나를 지정하지 않으면 bcp 유틸리티를 사용하는 대신 일련의 SELECT 및 INSERT 문을 사용하여 구독이 초기화됩니다. 이 프로세스는 훨씬 느립니다. 자세한 내용은 매개 변수가 있는 필터를 사용하여 병합 게시에 대한 스냅샷을 참조 하세요.

미리 계산된 파티션을 사용하려면

위에서 설명한 지침을 따르는 새 게시와 기존 게시의 경우 사전 계산 파티션이 기본적으로 설정됩니다. SQL Server Management Studio를 통해 또는 프로그래밍 방식으로 설정을 변경할 수 있습니다. 자세한 내용은 Optimize Parameterized Row Filters을 참조하세요.

사전 계산 파티션을 사용하기 위한 요구 사항

다음 요구 사항이 충족되면 새 병합 게시는 기본적으로 사전 계산 파티션을 사용하도록 설정하여 만들어지고 기존 게시는 기능을 사용하도록 자동으로 업그레이드됩니다. 게시가 요구 사항을 만족하지 않으면 게시를 변경한 다음 사전 계산 파티션을 설정할 수 있습니다. 아티클의 일부는 이러한 요구 사항을 만족하고 일부는 만족하지 않을 경우 두 개의 게시를 만들어 보십시오. 그 중 하나는 사전 계산 파티션을 설정합니다.

필터 절에 대한 요구 사항

  • HOST_NAME() 및 SUSER_SNAME()와 같이 매개 변수가 있는 행 필터에 사용되는 모든 함수는 매개 변수가 있는 필터 절에 직접 나타나야 하며 뷰 또는 동적 함수 내부에 중첩되지 않아야 합니다. 이러한 함수 에 대한 자세한 내용은 HOST_NAME(Transact-SQL), SUSER_SNAME(Transact-SQL)매개 변수가 있는 행 필터를 참조하세요.

  • 파티션을 만든 후에는 각 구독자에 대해 반환되는 값이 변경되지 않아야 합니다. 예를 들어 필터에서 HOST_NAME()를 사용하고 HOST_NAME() 값을 재정의하지 않는 경우 구독자의 컴퓨터 이름은 변경되지 않습니다.

  • 조인 필터에는 HOST_NAME() 및 SUSER_SNAME() 함수와 같이 동기화 중인 구독자에 따라 다른 값으로 평가되는 동적 함수가 포함되지 않아야 합니다. 매개 변수가 있는 행 필터만 동적 함수를 포함해야 합니다.

  • 필터 절에는 비결정적 함수를 사용할 수 없습니다. 비결정적 함수에 대한 자세한 내용은 결정적 함수 및 비결정적 함수를 참조 하세요.

  • 조인 필터 절이나 매개 변수가 있는 필터 절에서 참조하는 뷰에는 동적 함수가 포함되지 않아야 합니다.

  • 게시에 순환 조인 필터 관계가 없어야 합니다.

데이터베이스 정렬

  • 미리 계산된 파티션을 사용하는 경우 데이터베이스의 데이터 정렬은 테이블 또는 열의 데이터 정렬이 아니라 비교할 때 항상 사용됩니다. 다음 시나리오를 살펴 보십시오.

    • 데이터 정렬이 대/소문자를 구분하는 데이터베이스에 대/소문자를 구분하지 않는 테이블이 들어 있습니다.

    • 테이블에는 매개 변수가 있는 필터에서 구독자의 호스트 이름과 비교되는 ComputerName이 포함되어 있습니다.

    • 테이블에는 값이 "MYCOMPUTER"인 행 1개와 이 열의 값이 "mycomputer"인 행 하나가 포함됩니다.

    구독자가 호스트 이름 "mycomputer"와 동기화되는 경우 비교가 대/소문자를 구분하기 때문에 구독자는 하나의 행만 받습니다(데이터베이스의 데이터 정렬). 미리 계산된 파티션을 사용하지 않으면 테이블에 대/소문자를 구분하지 않는 데이터 정렬이 있기 때문에 구독자는 두 행을 모두 받습니다.

미리 계산된 파티션의 성능

변경 내용이 구독자에서 게시자에 업로드될 때 사전 계산 파티션의 성능 비용이 적지만 병합 처리 시간의 대부분은 파티션을 평가하고 게시자에서 구독자에게 변경 내용을 다운로드하는 데 소요되므로 순이익은 여전히 중요할 수 있습니다. 동시에 동기화하는 구독자의 수와 한 파티션에서 다른 파티션으로 행을 이동하는 동기화당 업데이트 수에 따라 성능상의 이점이 달라집니다.

참고 항목

매개 변수가 있는 행 필터