매개 변수가 있는 필터 - 매개 변수가 있는 행 필터Parameterized Filters - Parameterized Row Filters

이 항목 적용 대상: 예SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse 매개 변수가 있는 행 필터를 사용하면 여러 게시를 만들지 않고도 데이터의 여러 파티션을 서로 다른 구독자로 보낼 수 있습니다. 이전 버전의 SQL ServerSQL Server에서는 매개 변수가 있는 행 필터를 동적 필터라고 불렀습니다. Parameterized row filters allow different partitions of data to be sent to different Subscribers without requiring multiple publications to be created (parameterized filters were referred to as dynamic filters in previous versions of SQL ServerSQL Server). 파티션은 테이블에 있는 행의 하위 집합입니다. 게시된 테이블의 각 행은 매개 변수가 있는 필터를 만들 때 선택한 설정에 따라 하나의 파티션에만 속하거나(겹치지 않는 파티션 생성) 두 개 이상의 파티션에 속할 수 있습니다(겹치는 파티션 생성).A partition is a subset of the rows in a table; depending on the settings chosen when creating a parameterized row filter, each row in a published table can belong to one partition only (which produces nonoverlapping partitions) or to two or more partitions (which produces overlapping partitions).

겹치지 않는 파티션을 구독 간에 공유하게 하거나 지정된 파티션을 한 구독에서만 받도록 제한할 수 있습니다.Nonoverlapping partitions can be shared among subscriptions or they can be restricted so that only one subscription receives a given partition. 파티션의 동작을 제어하는 설정은 나중에 이 항목의 "적절한 필터링 옵션 사용"에서 설명합니다.The settings that control partition behavior are described in "Using the Appropriate Filtering Options" later in this topic. 이 설정을 사용하면 매개 변수가 있는 필터링을 응용 프로그램 및 성능 요구 사항에 알맞게 조정할 수 있습니다.Using these settings you can tailor parameterized filtering according to application and performance requirements. 일반적으로 겹치는 파티션은 유연성이 뛰어나고, 단일 구독으로 복제되는 겹치지 않는 파티션은 성능이 뛰어납니다.In general, overlapping partitions allow for greater flexibility, and nonoverlapping partitions replicated to a single subscription provide better performance.

매개 변수가 있는 필터는 단일 테이블에서 사용되며 일반적으로 조인 필터와 함께 사용하여 관련 테이블로 필터링을 확장합니다.Parameterized filters are used on a single table and are typically combined with join filters to extend filtering to related tables. 자세한 내용은 Join Filters을 참조하세요.For more information, see Join Filters.

매개 변수가 있는 행 필터를 정의하거나 수정하려면 Define and Modify a Parameterized Row Filter for a Merge Article을 참조하십시오.To define or modify a parameterized row filter, see Define and Modify a Parameterized Row Filter for a Merge Article.

매개 변수가 있는 필터의 동작 방식How Parameterized Filters Work

매개 변수가 있는 행 필터는 WHERE 절을 사용하여 게시할 데이터를 선택합니다.A parameterized row filter uses a WHERE clause to select the appropriate data to be published. 정적 행 필터와는 달리 해당 절에 리터럴 값을 지정하는 대신 SUSER_SNAME() 및 HOST_NAME() 시스템 함수를 하나 또는 둘 모두 지정합니다.Rather than specifying a literal value in the clause (as you do with a static row filter), you specify one or both of the following system functions: SUSER_SNAME() and HOST_NAME(). 사용자 정의 함수를 사용할 수도 있지만 사용자 정의 함수는 함수 본문에 SUSER_SNAME() 또는 HOST_NAME()을 포함해야 하거나 MyUDF(SUSER_SNAME()과 같은 시스템 함수 중 하나를 평가해야 합니다.User-defined functions can also be used, but they must include SUSER_SNAME() or HOST_NAME() in the body of the function, or evaluate one of these system functions (such as MyUDF(SUSER_SNAME()). 사용자 정의 함수의 본문에 SUSER_SNAME() 또는 HOST_NAME()이 포함되어 있는 경우 함수에 매개 변수를 전달할 수 없습니다.If a user-defined function includes SUSER_SNAME() or HOST_NAME() in the body of the function, you cannot pass parameters to the function.

SUSER_SNAME() 및 HOST_NAME() 시스템 함수는 병합 복제에 사용하는 것이 아니라 병합 복제에서 매개 변수가 있는 필터링용으로 사용합니다.The system functions SUSER_SNAME() and HOST_NAME() are not specific to merge replication, but they are used by merge replication for parameterized filtering:

  • SUSER_SNAME()은 SQL ServerSQL Server인스턴스 연결에 대한 로그인 정보를 반환합니다.SUSER_SNAME() returns login information for connections made to an instance of SQL ServerSQL Server. 매개 변수가 있는 필터에서 사용하면 병합 에이전트가 게시자로 연결할 때 사용한 로그인을 반환합니다. 로그인은 구독을 만들 때 지정합니다.When used in a parameterized filter, it returns the login used by the Merge Agent to connect to the Publisher (you specify a login when you create a subscription).

  • HOST_NAME()은 SQL ServerSQL Server인스턴스에 연결한 컴퓨터의 이름을 반환합니다.HOST_NAME() returns the name of the computer that is connecting to an instance of SQL ServerSQL Server. 이 시스템 함수를 매개 변수가 있는 필터에 사용하면 기본적으로 병합 에이전트가 실행 중인 컴퓨터의 이름이 반환됩니다.When used in a parameterized filter, by default it returns the name of the computer on which the Merge Agent is running. 끌어오기 구독의 경우 구독자의 이름을 반환하고 밀어넣기 구독의 경우 배포자의 이름을 반환합니다.For pull subscriptions it is the name of the Subscriber; for push subscriptions it is the name of the Distributor.

    구독자 또는 배포자 이름 대신 다른 값으로 이 함수를 재정의할 수도 있습니다.It is also possible to override this function with a value other than the name of the Subscriber or Distributor. 일반적으로 응용 프로그램에서는 판매 직원 이름 또는 판매 직원 ID와 같은 의미 있는 값으로 이 함수를 재정의합니다.Typically applications override this function with more meaningful values, such as a salesperson name or salesperson ID. 자세한 내용은 이 항목의 "HOST_NAME() 값 재정의"를 참조하십시오.For more information, see the section "Overriding the HOST_NAME() Value" in this topic.

    시스템 함수에서 반환된 값을 사용자가 필터링하는 테이블에서 지정한 열과 비교한 다음 해당 데이터가 구독자로 다운로드됩니다.The value returned by the system function is compared to a column you specify in the table you are filtering, and the appropriate data is downloaded to the Subscriber. 구독이 초기화되어 초기 스냅숏에 해당 데이터만 들어 있을 경우와 구독이 동기화될 때마다 이 비교를 수행합니다.This comparison is made when the subscription is initialized (so only the appropriate data is contained in the initial snapshot) and every time the subscription is synchronized. 기본적으로 게시자에서 발생한 변경으로 인해 행이 파티션에서 이동되는 경우 해당 행은 구독자에서 삭제됩니다. 이 동작은 sp_addmergepublication(Transact-SQL)@allow_partition_realignment 매개 변수를 사용하여 제어할 수 있습니다.By default, if a change at the Publisher results in a row being moved out of a partition, the row is deleted at the Subscriber (this behavior is controlled using the @allow_partition_realignment parameter of sp_addmergepublication (Transact-SQL)).

참고

매개 변수가 있는 필터에 대해 비교가 수행될 경우 항상 데이터베이스 데이터 정렬을 사용합니다.When comparisons are made for parameterized filters, the database collation is always used. 예를 들어 데이터베이스 데이터 정렬에서는 대/소문자를 구분하지 않지만 테이블 또는 열 데이터 정렬에서는 대/소문자를 구분할 경우 비교 시 대/소문자를 구분하지 않습니다.For example, if the database collation is case insensitive, but the table or column collation is case sensitive, the comparison will be case insensitive.

SUSER_SNAME()으로 필터링Filtering with SUSER_SNAME()

예제 데이터베이스의 Employee 테이블 Adventure WorksAdventure Works 을 고려해 봅니다.Consider the Employee Table in the Adventure WorksAdventure Works sample database. 이 테이블의 LoginID열에는 각 직원에 대한 로그인이 'domain\login' 형식으로 포함되어 있습니다.This table includes the column LoginID, which contains the login for each employee in the form 'domain\login'. 직원이 자신에게 관련된 데이터만 받을 수 있도록 이 테이블을 필터링하려면 다음과 같은 필터 절을 지정합니다.To filter this table so that employees receive only the data related to them, specify a filter clause of:

LoginID = SUSER_SNAME()  

예를 들어 값이 'adventure-works\john5'인 직원이 있습니다.For example, the value for one of the employees is 'adventure-works\john5'. 병합 에이전트가 게시자로 연결할 경우 구독을 만들 때 사용자가 지정한 로그인(이 경우 'adventure-works\john5')을 사용합니다.When the Merge Agent connects to the Publisher, it uses the login you specified when creating the subscription (in this case 'adventure-works\john5'). 그러면 병합 에이전트는 SUSER_SNAME()에서 반환된 값을 해당 테이블의 값과 비교한 다음 LoginID 열에 'adventure-works\john5'라는 값이 포함된 행만 다운로드합니다.The Merge Agent then compares the value returned by SUSER_SNAME() to the values in the table and downloads only the row that contains a value of 'adventure-works\john5' in the LoginID column.

HOST_NAME()으로 필터링Filtering with HOST_NAME()

HumanResources.Employee 테이블을 고려해 봅니다.Consider the HumanResources.Employee table. 이 테이블의 ComputerName 과 같은 열에 각 직원의 컴퓨터 이름이 'name_computertype' 형식으로 포함되어 있다고 가정합니다.Suppose this table contained a column such as ComputerName with the name of each employee's computer in the form 'name_computertype'. 직원이 자신에게 관련된 데이터만 받을 수 있도록 이 테이블을 필터링하려면 다음과 같은 필터 절을 지정합니다.To filter this table so that employees receive only the data related to them, specify a filter clause of:

ComputerName = HOST_NAME()  

예를 들어 값이 'john5_laptop'인 직원이 있습니다.For example, the value for one of the employees could be 'john5_laptop'. 병합 에이전트가 게시자로 연결하면 HOST_NAME()에서 반환된 값을 해당 테이블의 값과 비교한 다음 ComputerName 열에 'john5_laptop'이라는 값이 포함된 행만 다운로드합니다.When the Merge Agent connects to the Publisher, it compares the value returned by HOST_NAME() to the values in the table and downloads only the row that contains a value of 'john5_laptop' in the ComputerName column.

함수를 필터에서 함께 사용할 수도 있습니다.It is also possible to combine the functions in a filter. 예를 들어 직원이 자신의 컴퓨터에서 자신의 로그인을 사용할 때만 데이터를 받도록 하려면 필터 절을 다음과 같이 지정합니다.For example, if you wanted to ensure that an employee received data only if they used their login on their computer, the filter clause could be:

LoginID = SUSER_SNAME() AND ComputerName = HOST_NAME()  

HOST_NAME() 값을 재정의하지 않을 경우 HOST_NAME()으로 필터링하는 방법은 일반적으로 끌어오기 구독에만 사용합니다.Unless you are overriding the HOST_NAME() value, filtering with HOST_NAME() is typically used only with pull subscriptions. 함수에서 반환되는 값은 병합 에이전트가 실행 중인 컴퓨터의 이름입니다.The value returned by the function is the name of the computer on which the Merge Agent is running. 끌어오기 구독의 경우 각 구독마다 값이 다르지만 밀어넣기 구독의 경우 값이 동일합니다. 밀어넣기 구독의 경우 병합 에이전트는 모두 배포자에서 실행됩니다.For pull subscriptions, the value is different for each subscription, but for push subscriptions, the value is the same (all Merge Agents run at the Distributor for push subscriptions).

중요

HOST_NAME() 함수의 값을 재정의할 수 있으므로 HOST_NAME()이 포함된 필터를 사용하여 데이터 파티션에 대한 액세스를 제어할 수 없습니다.The value for the HOST_NAME() function can be overridden; therefore it is not possible to use filters that include HOST_NAME() to control access to partitions of data. 데이터 파티션에 대한 액세스를 제어하려면 SUSER_SNAME()을 사용하거나 SUSER_SNAME()을 HOST_NAME()과 함께 사용합니다. 또는 정적 행 필터를 사용합니다.To control access to partitions of data, use SUSER_SNAME(), SUSER_SNAME() in combination with HOST_NAME(), or use static row filters.

HOST_NAME() 값 재정의Overriding the HOST_NAME() Value

위에서 설명한 것처럼 HOST_NAME()은 기본적으로 SQL ServerSQL Server인스턴스에 연결된 컴퓨터의 이름을 반환합니다.As noted earlier, HOST_NAME() by default returns the name of the computer that is connecting to an instance of SQL ServerSQL Server. 매개 변수가 있는 필터를 사용할 경우 구독을 만들 때 값을 입력하여 이 값을 재정의하는 것이 일반적입니다.When using parameterized filters, it is common to override this value by supplying a value when you create a subscription. 그러면 HOST_NAME() 함수는 컴퓨터 이름 대신 사용자가 지정한 값을 반환합니다.The HOST_NAME() function then returns the value you specify rather than the name of the computer.

참고

HOST_NAME()을 재정의할 경우 HOST_NAME() 함수에 대한 모든 호출은 사용자가 지정한 값을 반환합니다.If you override HOST_NAME(), all calls to the HOST_NAME() function will return the value you specify. 다른 응용 프로그램이 컴퓨터 이름을 반환하는 HOST_NAME()에 종속되지 않아야 합니다.Ensure that other applications are not depending on HOST_NAME() returning the computer name.

HumanResources.Employee 테이블을 고려해 봅니다.Consider the HumanResources.Employee table. 이 테이블에는 EmployeeID열이 포함되어 있습니다.This table includes the column EmployeeID. 각 직원이 자신에게 관련된 데이터만 받을 수 있도록 이 테이블을 필터링하려면 다음과 같은 필터 절을 지정합니다.To filter this table so that each employee receives only the data related to them, specify a filter clause of:

EmployeeID = CONVERT(int,HOST_NAME())

예를 들어 직원 Pamela Ansman-Wolfe에게 직원 ID로 280을 할당합니다.For example, employee Pamela Ansman-Wolfe has been assigned an employee ID of 280. 이 직원에 대한 구독을 만들 때 HOST_NAME() 값에 직원 ID 값(이 경우 280)을 지정합니다.Specify the value of the employee ID (280 in our example) for the HOST_NAME() value when creating a subscription for this employee. 병합 에이전트가 게시자로 연결하면 HOST_NAME()에서 반환된 값을 해당 테이블의 값과 비교한 다음 EmployeeID 열에 280이라는 값이 포함된 행만 다운로드합니다.When the Merge Agent connects to the Publisher, it compares the value returned by HOST_NAME() to the values in the table and downloads only the row that contains a value of 280 in the EmployeeID column.

중요

HOST_NAME() 함수는 nchar 값을 반환하므로 위의 예처럼 필터 절의 열이 숫자 데이터 형식인 경우 CONVERT를 사용해야 합니다.The HOST_NAME() function returns an nchar value, so you must use CONVERT if the column in the filter clause is of a numeric data type, as it is in the example above. 성능상의 이유로 CONVERT(nchar,EmployeeID) = HOST_NAME()과 같은 매개 변수가 있는 행 필터 절의 열 이름에는 함수를 적용하지 않는 것이 좋습니다.For performance reasons, we recommended that you do not apply functions to column names in parameterized row filter clauses, such as CONVERT(nchar,EmployeeID) = HOST_NAME(). 대신 EmployeeID = CONVERT(int,HOST_NAME())예제에서 보여준 방식을 사용하는 것이 좋습니다.Instead, we recommend using the approach shown in the example: EmployeeID = CONVERT(int,HOST_NAME()). 이 절을 @subset_filterclause @allow_partition_realignment @subset_filterclause매개 변수에 사용할 수 있지만 일반적으로 새 게시 마법사에서는 사용할 수 없습니다. 마법사는 필터 절을 실행하여 유효성을 검사하는데 컴퓨터 이름을 int에서는 매개 변수가 있는 행 필터를 동적 필터라고 불렀습니다.This clause can be used for the @subset_filterclause parameter of sp_addmergearticle, but it typically cannot be used in the New Publication Wizard (the wizard executes the filter clause to validate it, which fails because the computer name cannot be converted to an int). 새 게시 마법사를 사용할 경우 게시에 대한 스냅숏을 만들기 전에 마법사에서 CONVERT(nchar,EmployeeID) = HOST_NAME() 을 지정한 다음 sp_changemergearticle 을 사용하여 해당 절을 EmployeeID = CONVERT(int,HOST_NAME()) 로 변경하는 것이 좋습니다.If you use the New Publication Wizard, we recommend specifying CONVERT(nchar,EmployeeID) = HOST_NAME() in the wizard and then use sp_changemergearticle to change the clause to EmployeeID = CONVERT(int,HOST_NAME()) before creating a snapshot for the publication.

HOST_NAME() 값을 재정의하려면To override the HOST_NAME() value

다음 방법 중 하나를 사용하여 HOST_NAME() 값을 재정의할 수 있습니다.Use one of the following methods to override the HOST_NAME() value:

매개 변수가 있는 필터로 게시에 대한 구독 초기화Initializing a Subscription to a Publication with Parameterized Filters

병합 게시에서 매개 변수가 있는 행 필터를 사용하면 복제 시 각 구독이 두 부분으로 구성된 스냅숏으로 초기화됩니다.When parameterized row filters are used in merge publications, replication initializes each subscription with a two-part snapshot. 자세한 내용은 Snapshots for Merge Publications with Parameterized Filters을 참조하세요.For more information, see Snapshots for Merge Publications with Parameterized Filters.

적절한 필터링 옵션 사용Using the Appropriate Filtering Options

매개 변수가 있는 필터를 사용할 경우 사용자가 제어하는 두 가지 중요한 영역이 있습니다.There are two key areas over which you have control when using parameterized filters:

  • 병합 복제에서 필터를 처리하는 방법은 use partition groupskeep partition changes게시 설정 중 하나를 통해 제어할 수 있습니다.How the filters are processed by merge replication, which is controlled by one of two publication settings: use partition groups and keep partition changes.

  • 구독자 간에 데이터를 공유하는 방법은 아티클 설정 partition options에 반영해야 합니다.How the data is shared among Subscribers, which must be reflected by the article setting partition options.

    필터링 옵션을 설정하려면 Optimize Parameterized Row Filters를 참조하십시오.To set filtering options, see Optimize Parameterized Row Filters.

'use partition groups' 및 'keep partition changes' 설정Setting 'use partition groups' and 'keep partition changes'

use partition groupskeep partition changes 옵션은 모두 게시 데이터베이스에 추가 메타데이터를 저장하여 필터링된 아티클이 있는 게시에 대한 동기화 성능을 향상시킵니다.Both the use partition groups and keep partition changes options improve the synchronization performance for publications with filtered articles by storing additional metadata in the publication database. use partition groups 옵션은 사전 계산 파티션 기능을 사용하여 더욱 향상된 성능을 제공합니다.The use partition groups option provides greater performance improvement through the use of the precomputed partitions feature. 게시의 아티클이 일련의 요구 사항을 충족하는 경우 이 옵션은 기본적으로 true 로 설정됩니다.This option is set to true by default if the articles in your publication adhere to a set of requirements. 이러한 요구 사항에 대한 자세한 내용은 사전 계산 파티션으로 매개 변수가 있는 필터 성능 최적화를 참조하세요.For more information about these requirements, see Optimize Parameterized Filter Performance with Precomputed Partitions. 아티클이 사전 계산 파티션을 사용하기 위한 요구 사항을 만족시키지 못할 경우 keep partition changes 옵션이 true로 설정됩니다.If your articles do not meet the requirements for using precomputed partitions, the keep partition changes option to is set to true.

'partition options' 설정Setting 'partition options'

아티클을 만들 때 필터링된 테이블의 데이터를 구독자에서 공유하는 방식에 따라 partition options 속성의 값을 지정합니다.You specify a value for the partition options property when creating an article, according to the way in which data in the filtered table will be shared by Subscribers. 속성은 sp_addmergearticle, sp_changemergearticleArticle Properties 대화 상자를 사용하여 네 값 중 하나로 설정할 수 있습니다.The property can be set to one of four values using sp_addmergearticle, sp_changemergearticle, and the Article Properties dialog box. 새 게시 마법사와 게시 속성 대화 상자의 필터 추가 또는 필터 편집 대화 상자를 사용하여 이 속성을 두 개의 값 중 하나로 설정할 수 있습니다.The property can be set to one of two values using the Add Filter or Edit Filter dialog boxes, which are available from the New Publication Wizard and the Publication Properties dialog box. 다음 표에서는 사용할 수 있는 값을 요약합니다.The following table summarizes the available values:

설명Description 필터 추가 및 필터 편집에 있는 값Value in Add Filter and Edit Filter 아티클 속성에 있는 값Value in Article Properties 저장 프로시저에 있는 값Value in stored procedures
파티션에 있는 데이터는 겹치며 구독자는 매개 변수가 있는 필터에서 참조된 열은 업데이트할 수 있습니다.Data in the partitions is overlapping, and the Subscriber can update columns referenced in a parameterized filter. 이 테이블의 행을 여러 구독으로 이동A row from this table will go to multiple subscriptions 겹침Overlapping 00
파티션에 있는 데이터는 겹치며 구독자는 매개 변수가 있는 필터에서 참조된 열은 업데이트할 수 없습니다.Data in the partitions is overlapping, and the Subscriber cannot update columns referenced in a parameterized filter. N/AN/A 겹침, 파티션 외부 데이터 변경 내용 허용 안 함Overlapping, disallow out-of-partition data changes 11
파티션에 있는 데이터가 겹치지 않으며 데이터는 구독자 간에 공유됩니다.Data in the partitions is not overlapping, and the data is shared between subscriptions. 구독자는 매개 변수가 있는 필터에서 참조된 열은 업데이트할 수 없습니다.The Subscriber cannot update columns referenced in a parameterized filter. N/AN/A 겹치지 않음, 구독 간 공유Nonoverlapping, shared between subscriptions 22
파티션에 있는 데이터는 겹치지 않으며 파티션당 하나의 구독이 있습니다.Data in the partitions is not overlapping, and there is a single subscription per partition. 구독자는 매개 변수가 있는 필터에서 참조된 열은 업데이트할 수 없습니다.The Subscriber cannot update columns referenced in a parameterized filter. 이 테이블의 행을 단일 구독으로 이동A row from this table will go to only one subscription 겹치지 않음, 단일 구독Nonoverlapping, single subscription 33

*기본 필터링 옵션이 0, 1 또는 2로 설정될 경우 필터 추가필터 편집 대화 상자에 이 테이블의 행을 여러 구독으로 이동이 표시됩니다.*If the underlying filtering option is set to 0, or 1, or 2, the Add Filter and Edit Filter dialog boxes will display A row from this table will go to multiple subscriptions.

이 옵션을 지정하면 해당 아티클의 각 데이터 파티션에 대해 하나의 구독만 허용합니다.If you specify this option, there can only be a single subscription for each partition of data in that article. 새 구독의 필터링 조건이 기존 구독과 동일한 파티션을 사용하도록 하여 두 번째 구독이 생성될 경우 기존 구독이 삭제됩니다.If a second subscription is created in which the filtering criterion of the new subscription resolves to the same partition as the existing subscription, the existing subscription is dropped.

중요

구독자가 데이터를 공유하는 방식에 따라 partition options 값을 설정해야 합니다.The partition options value must be set according to how data is shared by Subscribers. 예를 들어 파티션당 구독이 하나 있는 겹치지 않는 파티션을 지정했지만 데이터가 다른 구독자에서 업데이트되는 경우 병합 에이전트가 동기화 중에 실패하고 데이터가 일치하지 않을 수 있습니다.If, for example, you specify that a partition is nonoverlapping with a single subscription per partition, but data is then updated at another Subscriber, the Merge Agent can fail during synchronization and non-convergence can occur.

적절한 파티션 옵션 선택Selecting the Appropriate Partition Option

겹치지 않는 파티션을 사전 계산 파티션과 함께 사용하여 일부 기능 제한이 허용되는 상황에서 성능을 향상시킬 수 있습니다.Nonoverlapping partitions work in conjunction with precomputed partitions to improve performance in situations where some functional limitations are acceptable. 사전 계산 파티션을 사용하면 구독자로 다운로드하는 속도는 빨라지지만 업로드 속도는 느려집니다.Precomputed partitions quicken downloads to Subscribers, but slow uploads. 겹치지 않는 파티션을 사용하면 사전 계산 파티션으로 인한 업로드 작업 손실을 최소할 수 있습니다.Nonoverlapping partitions minimize the upload cost associated with precomputed partitions. 사용하는 매개 변수가 있는 필터와 조인 필터가 복잡할수록 겹치지 않는 파티션의 성능상 이점이 더욱 분명하게 드러납니다.The performance benefit of nonoverlapping partitions is more noticeable when the parameterized filters and join filters used are more complex.

게시에서 사용할 파티션 옵션을 결정할 경우 다음 시나리오를 고려하십시오.Consider the following scenarios when deciding which partition options to use in a publication.

  • Adventure WorksAdventure Works 에는 지정된 우편 번호에 해당하는 고객을 담당하는 판매원으로 구성된 이동 영업팀이 있습니다. has a mobile sales force with each sales person responsible for customers in a given zip code. 고객이 한 판매 지역에서 다른 판매 지역으로 이동할 경우 고객이 다른 판매원에게 할당되도록 응용 프로그램에서 우편 변호를 업데이트해야 합니다.The application requires that the zip code be updated if a customer moves from one sales territory to another, so that the customer is assigned to a different sales person. 매개 변수가 있는 필터는 고객의 우편 번호를 기준으로 하며 업데이트가 발생하면 한 판매원의 파티션에서 우편 번호가 제거되어 다른 판매원의 파티션으로 삽입됩니다.The parameterized filter is based on the customer's zip code, and the update removes the zip code from one sales person's partition and inserts it into another sales person's partition. 이 작업에는 매개 변수가 있는 필터에서 참조되는 열을 업데이트하는 기능이 있는 겹치는 파티션이 필요합니다.This requires overlapping partitions with the ability to update columns referenced in a parameterized filter. 이 옵션을 사용하면 융통성을 최대로 높일 수 있지만 겹치지 않는 파티션보다 성능이 떨어질 수 있습니다.This option maximizes flexibility but might not perform as well as nonoverlapping partitions.

  • 직업 소개소에는 각 지방의 지역 사무실로 전달할 데이터가 있습니다.An employment agency has data that is supplied to regional offices in each county of the state. 데이터는 겹치지 않습니다. 본사의 테이블에 있는 각 행은 하나의 파티션에만 포함되지만 이러한 행을 포함하는 파티션은 해당 지방의 여러 지역 사무실로 전송됩니다.The data does not overlap; each row in the table at the agency's headquarters is included in only one partition, but that partition is sent to multiple offices in the same county. 이 작업에는 구독 간에 파티션을 공유하는 겹치지 않는 파티션 옵션이 적합합니다. 이 옵션을 사용하면 겹치는 파티션에 비해 보다 뛰어난 성능을 제공하면서 응용 프로그램 요구 사항도 만족시킵니다.The nonoverlapping partition option with partitions shared between subscriptions is appropriate, providing a performance improvement over overlapping partitions while satisfying the application requirements.

  • 겹치지 않는 파티션이 있고 하나의 구독만이 파티션에서 데이터를 받고 업데이트할 경우 더 많은 성능상의 이점이 있습니다.If you have nonoverlapping partitions and only one subscription receives and updates the data in a partition, further performance benefits can be realized. 이 시나리오는 POS(Point of Sale) 시스템 및 구독자에서 주로 데이터를 수집하여 게시자로 업로드하는 FF(Field Force) 응용 프로그램에 적합합니다.This scenario is common for point of sale systems, and field force applications in which data is primarily collected at the Subscriber and uploaded to the Publisher. 배달 응용 프로그램의 Package 테이블을 고려해 보십시오. 각 패키지가 트럭에 실리면서 Package 테이블에서 패키지의 상태가 변경되고 해당 변경 내용은 다시 본사로 복제됩니다.Consider a Package table in a delivery application: as each package is loaded onto a truck, the status of the package is changed in the Package table, and the change is replicated back to headquarters. 운전 기사는 두 대의 서로 다른 트럭에 실린 같은 패키지의 상태를 업데이트하지 않으므로 Package 테이블을 파티션당 하나의 구독이 있는 겹치지 않는 파티션으로 만들 수 있습니다.Drivers would not update the status of the same package on two different trucks, so the Package table is a good candidate for a nonoverlapping partition with a single subscription per partition.

겹치지 않는 파티션에 대한 고려 사항Considerations for Nonoverlapping Partitions

겹치지 않는 파티션 사용 시 다음 사항을 고려하십시오.Keep the following considerations in mind when using nonoverlapping partitions.

일반적인 고려 사항General Considerations
  • 게시에서는 사전 계산 파티션을 사용해야 합니다.The publication must use precomputed partitions.

  • 행은 하나의 파티션에만 속해야 합니다.A row must belong to only one partition.

  • 아티클은 논리적 레코드의 일부일 수 없습니다.Articles cannot be part of a logical record.

  • 대체 동기화 파트너는 지원되지 않습니다(이 기능은 사용되지 않음).Alternate synchronization partners are not supported (this feature is deprecated).

  • 구독자는 매개 변수가 있는 필터에서 참조된 열은 업데이트할 수 없습니다.The Subscriber cannot update columns referenced in a parameterized filter.

  • 파티션에 속하지 않는 구독자에서의 삽입은 삭제되지 않지만If an insert at a Subscriber does not belong to the partition, it is not deleted. 다른 구독자로 복제되지 않습니다.However, it will not be replicated to other Subscribers.

  • 겹치는 파티션을 사용하는 일부 환경에서 병합 에이전트가 데이터를 삽입하면 ID 범위가 조정됩니다.In some circumstances with overlapping partitions, identity ranges are adjusted when the Merge Agent inserts data. 겹치지 않는 파티션을 사용할 경우 구독 데이터베이스에서 ID 범위를 조정할 권한이 있는 사용자가 삽입할 때에만 범위가 조정됩니다.With nonoverlapping partitions, ranges can only be adjusted during inserts by a user who has permission to adjust identity ranges in the subscription database. 사용자는 테이블의 소유자이거나 sysadmin 고정 서버 역할, db_owner 고정 데이터베이스 역할 또는 db_ddladmin 고정 데이터베이스 역할의 멤버여야 합니다.The user must either own the table, or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role.

파티션당 하나의 구독이 있는 겹치지 않는 파티션에 대한 추가 고려 사항Additional Considerations for Nonoverlapping Partitions with a Single Subscription per Partition
조인 필터에 대한 추가 고려 사항Additional Considerations for Join Filters
  • 조인 필터 계층에서 겹치는 파티션이 있는 아티클은 겹치지 않는 파티션이 있는 아티클 위에 표시될 수 없습니다.In a join filter hierarchy, an article with an overlapping partition cannot appear above an article with a nonoverlapping partition. 즉 자식 아티클이 겹치지 않는 파티션을 사용하면 부모 아티클도 겹치지 않는 파티션을 사용해야 합니다.In other words, a parent article must use nonoverlapping partitions if the child article does. 조인 필터에 대한 자세한 내용은 Join Filters를 참조하십시오.For information about join filters, see Join Filters.

  • 겹치지 않는 파티션이 자식인 조인 필터에서는 join unique key 속성을 1로 설정해야 합니다.A join filter in which the nonoverlapping partition is a child must have the join unique key property set to 1. 자세한 내용은 Join Filters을 참조하세요.For more information, see Join Filters.

  • 아티클에는 매개 변수가 있는 필터 또는 조인 필터가 하나만 있어야 합니다.The article should only have one parameterized filter or join filter. 매개 변수가 있는 필터가 있으면서 조인 필터에서 부모일 수 있습니다.Having a parameterized filter and being the parent in a join filter is allowed. 매개 변수가 있는 필터가 있으면서 조인 필터에서 자식일 수는 없습니다.Having a parameterized filter and being the child in a join filter is not allowed. 조인 필터가 두 개 이상일 수도 없습니다.Having more than one join filter is also not allowed.

  • 게시자의 두 테이블에 조인 필터 관계가 있고 자식 테이블에는 부모 테이블에 없는 행이 있을 경우 부모 테이블에 없는 행을 삽입해도 관련된 행이 구독자로 다운로드되지 않습니다(겹치는 파티션의 경우 다운로드됨).If two tables at the Publisher have a join filter relationship and the child table has rows that have no corresponding row in the parent table, an insert of the missing parent row will not result in the related rows being downloaded to the Subscriber (the rows would be downloaded with overlapping partitions). 예를 들어 SalesOrderHeader 테이블에는 없는 행이 SalesOrderDetail 테이블에 있고 이 행을 SalesOrderHeader에 삽입하면 해당 행은 구독자로 다운로드되지만 SalesOrderDetail 의 행은 다운로드되지 않습니다.For example, if the SalesOrderDetail table has rows with no corresponding row in the SalesOrderHeader table, and you insert the missing row in SalesOrderHeader, the row is downloaded to the Subscriber, but the corresponding rows in SalesOrderDetail are not.

관련 항목:See Also

시간 기반 행 필터에 대한 최상의 구현 방법 Best Practices for Time-Based Row Filters
게시된 데이터 필터링 Filter Published Data
병합 복제의 게시된 데이터 필터링Filter Published Data for Merge Replication