트랜잭션 복제 성능 향상Enhance Transactional Replication Performance

일반적인 복제 성능 향상에 설명된 일반 성능 팁을 살펴본 후에 트랜잭션 복제에 해당하는 이러한 추가 영역을 살펴보십시오.After considering the general performance tips described in Enhancing General Replication Performance, consider these additional areas specific to transactional replication.

데이터베이스 디자인Database Design

  • 응용 프로그램 디자인에서 트랜잭션 크기를 최소화합니다.Minimize transaction size in your application design.

    기본적으로 트랜잭션 복제는 트랜잭션 경계에 따라 변경 내용을 전파합니다.By default, transactional replication propagates changes according to transaction boundaries. 트랜잭션이 작을수록 배포 에이전트가 네트워크 문제로 인해 트랜잭션을 다시 전송해야 할 확률이 낮아집니다.If transactions are smaller, it is less likely that the Distribution Agent will have to resend a transaction due to network issues. 에이전트가 트랜잭션을 다시 전송해야 할 경우 보내는 데이터 양은 적어집니다.If the agent is required to resend a transaction, the amount of data sent is smaller.

배포자 구성Distributor Configuration

  • 전용 서버에서 배포자를 구성합니다.Configure the Distributor on a dedicated server.

    원격 배포자를 구성하여 게시자에서 처리 오버헤드를 줄일 수 있습니다.You can reduce processing overhead on the Publisher by configuring a remote Distributor. 자세한 내용은 배포 구성을 참조하세요.For more information, see Configure Distribution.

  • 배포 데이터베이스 크기를 적절히 조정합니다.Size the distribution database appropriately.

    시스템에서 명령 저장에 필요한 공간을 결정할 수 있도록 일반적인 로드 상태에서 복제를 테스트합니다.Test replication with a typical load for your system to determine how much space is required to store commands. 데이터베이스는 자주 자동 증가되지 않고도 명령을 저장할 수 있을 만큼 충분히 커야 합니다.Ensure the database is large enough to store commands without having to auto-grow frequently. 데이터베이스의 크기 변경에 대한 자세한 내용은 ALTER DATABASE(Transact-SQL)를 참조하세요.For more information about changing the size of a database, see ALTER DATABASE (Transact-SQL).

게시 디자인Publication Design

  • 게시된 테이블을 일괄로 업데이트할 때 저장 프로시저 실행을 복제합니다.Replicate stored procedure execution when making batch updates to published tables.

    구독자의 다수 행에 가끔씩 영향을 미치는 일괄 처리 업데이트가 있는 경우 저장 프로시저를 사용하여 게시된 테이블을 업데이트하고 저장 프로시저의 실행을 게시해 보십시오.If you have batch updates that occasionally affect a large number of rows at the Subscriber, you should consider updating the published table using a stored procedure and publish the execution of the stored procedure. 배포 에이전트는 영향을 받은 모든 행의 업데이트나 삭제를 보내는 대신 구독자에서 같은 매개 변수 값으로 동일한 프로시저를 실행합니다.Instead of sending an update or delete for every row affected, the Distribution Agent executes the same procedure at the Subscriber with the same parameter values. 자세한 내용은 Publishing Stored Procedure Execution in Transactional Replication를 참조하세요.For more information, see Publishing Stored Procedure Execution in Transactional Replication.

  • 여러 게시 간에 아티클을 분산시킵니다.Spread articles across multiple publications.

    -SubscriptionStreams 매개 변수(이 항목의 뒷부분에 설명됨)를 사용할 수 없는 경우 여러 게시를 만들어 보십시오.If you cannot use the -SubscriptionStreams parameter (described later in this topic), consider creating multiple publications. 이러한 게시에 아티클을 분산시키면 복제가 구독자에게 변경 내용을 병렬로 적용할 수 있습니다.Spreading articles across these publications allows replication to apply changes in parallel to Subscribers.

구독 고려 사항Subscription Considerations

  • 같은 게시자에 여러 게시가 있을 경우 공유 에이전트가 아닌 독립 에이전트를 사용합니다. 새 게시 마법사에서는 이것이 기본값입니다.Use independent agents rather than shared agents if you have multiple publications on the same Publisher (this is the default for the New Publication Wizard).

  • 에이전트를 잦은 간격으로 실행하는 대신 계속 실행합니다.Run agents continuously instead of on very frequent schedules.

    일정을 분 단위처럼 자주 실행하도록 설정하는 대신 계속 실행되도록 설정하면 에이전트를 시작하고 중지할 필요가 없으므로 복제 성능이 향상됩니다.Setting the agents to run continuously rather than creating frequent schedules (such as every minute) improves replication performance, because the agent does not have to start and stop. 배포 에이전트가 계속 실행되도록 설정하면 변경 내용이 토폴로지에 연결된 다른 서버로 짧은 대기 시간 내에 전파됩니다.When you set the Distribution Agent to run continuously, changes are propagated with low latency to the other servers that are connected in the topology. 참조 항목:For more information, see:

배포 에이전트 및 로그 판독기 에이전트 매개 변수Distribution Agent and Log Reader Agent Parameters

  • 의도치 않게 발생하는 일회성 병목 현상을 해결하려면 로그 판독기 에이전트에 –MaxCmdsInTran 매개 변수를 사용하세요.To resolve accidental, one-time bottlenecks use the –MaxCmdsInTran parameter for the Log Reader Agent.

    –MaxCmdsInTran 매개 변수는 로그 판독기가 배포 데이터베이스에 대해 명령을 쓸 때 트랜잭션으로 그룹화된 최대 문 개수를 지정합니다.The –MaxCmdsInTran parameter specifies the maximum number of statements grouped into a transaction as the Log Reader writes commands to the distribution database. 이 매개 변수를 사용하면 구독자에서 명령을 적용할 때 로그 판독기 에이전트와 배포 에이전트가 게시자에서 큰 트랜잭션(여러 명령으로 구성됨)을 여러 개의 작은 트랜잭션으로 나눌 수 있습니다.Using this parameter allows the Log Reader Agent and Distribution Agent to divide large transactions (consisting of many commands) at the Publisher into several smaller transactions when applying commands at the Subscriber. 이 매개 변수를 지정하면 배포자에서 경합을 줄일 수 있고 게시자와 구독자 간 대기 시간을 줄일 수 있습니다.Specifying this parameter can reduce contention at the Distributor and reduce latency between the Publisher and Subscriber. 원래 트랜잭션이 작은 단위로 적용되므로 구독자는 엄격한 트랜잭션 원자성을 깨고 원래 트랜잭션이 끝나기 전에 큰 논리적 게시자 트랜잭션의 행에 액세스할 수 있습니다.Because the original transaction is applied in smaller units, the Subscriber can access rows of a large logical Publisher transaction prior to the end of the original transaction, breaking strict transactional atomicity. 기본값은 0으로 게시자의 트랜잭션 경계를 유지합니다.The default is 0, which preserves the transaction boundaries of the Publisher. 이 매개 변수는 Oracle 게시자에는 적용되지 않습니다.This parameter does not apply to Oracle Publishers.

    경고

    MaxCmdsInTran 은 항상 설정되도록 설계되지 않았습니다.MaxCmdsInTran was not designed to be always turned on. 단일 트랜잭션에 많은 DML 작업을 실수로 수행한 경우의 문제(전체 트랜잭션이 배포 데이터베이스에 있고 잠금이 보유될 때까지 명령 배포에 지연 발생)를 해결하기 위한 것입니다.It exists to work around cases where someone accidentally performed a large number of DML operations in a single transaction (causing delay in distribution of commands until the entire transaction is in distribution database, locks being held, etc.). 정기적으로 이 상황이 발생하는 경우 응용 프로그램을 검토하고 트랜잭션 크기를 줄일 수 있는 방법을 찾아야 합니다.If you routinely fall into this situation, you should review your applications and find ways to reduce the transaction size.

  • 배포 에이전트에 대해 –SubscriptionStreams 매개 변수를 사용합니다.Use the –SubscriptionStreams parameter for the Distribution Agent.

    –SubscriptionStreams 매개 변수는 집계 복제 처리량을 크게 높일 수 있습니다.The –SubscriptionStreams parameter can greatly improve aggregate replication throughput. 이 매개 변수는 변경 내용의 일괄 처리를 병렬로 적용하기 위해 구독자에 여러 연결을 설정하도록 허용하지만 단일 스레드를 사용할 때 나타나는 여러 가지 트랜잭션 특징을 유지합니다.It allows multiple connections to a Subscriber to apply batches of changes in parallel, while maintaining many of the transactional characteristics present when using a single thread. 여러 연결 중 하나가 실행 또는 커밋되지 않으면 모든 연결에서 현재 일괄 처리를 중지하고 에이전트가 단일 스트림을 사용하여 실패한 일괄 처리를 다시 시도합니다.If one of the connections fails to execute or commit, all connections will abort the current batch, and the agent will use a single stream to retry the failed batches. 이러한 재시도 단계가 완료되기 전에는 구독자에 임시 트랜잭션 불일치가 발생할 수 있으며Before this retry phase completes, there can be temporary transactional inconsistencies at the Subscriber. 실패한 일괄 처리가 성공적으로 커밋되면 구독자의 트랜잭션 일관성이 다시 유지됩니다.After the failed batches are successfully committed, the Subscriber is brought back to a state of transactional consistency.

    sp_addsubscription(Transact-SQL)@subscriptionstreams를 사용하여 이 에이전트 매개 변수의 값을 지정할 수 있습니다.A value for this agent parameter can be specified using the @subscriptionstreams of sp_addsubscription (Transact-SQL).

  • 로그 판독기 에이전트에 대해 -ReadBatchSize 매개 변수의 값을 늘립니다.Increase the value of the -ReadBatchSize parameter for the Log Reader Agent.

    로그 판독기 에이전트와 배포 에이전트는 트랜잭션 읽기 및 커밋 작업을 위한 일괄 처리 크기를 지원합니다.The Log Reader Agent and Distribution Agent support batch sizes for transaction read and commit operations. 일괄 처리 크기는 기본적으로 500개 트랜잭션입니다.Batch sizes default to 500 transactions. 로그 판독기 에이전트는 트랜잭션의 복제 표시 여부에 상관없이 로그에서 특정 트랜잭션 수를 읽습니다.The Log Reader Agent reads the specific number of transactions from the log, whether or not they are marked for replication. 많은 트랜잭션이 게시 데이터베이스에 기록되는데 그 중 일부 하위 집합만이 복제용으로 표시되는 경우 -ReadBatchSize 매개 변수를 사용하여 로그 판독기 에이전트의 읽기 일괄 처리 크기를 늘려야 합니다.When a large number of transactions is written to a publication database, but only a small subset of those are marked for replication, you should use the -ReadBatchSize parameter to increase the read batch size of the Log Reader Agent. 이 매개 변수는 Oracle 게시자에는 적용되지 않습니다.This parameter does not apply to Oracle Publishers.

  • 배포 에이전트에 대해 -CommitBatchSize 매개 변수의 값을 늘립니다.Increase the value of the -CommitBatchSize parameter for the Distribution Agent.

    트랜잭션 세트를 커밋할 때 오버헤드는 고정되어 있습니다. 그러므로 다수의 트랜잭션을 커밋하는 횟수를 줄이면 오버헤드가 대량의 데이터에 분산됩니다.Committing a set of transactions has a fixed overhead; by committing a larger number of transactions less frequently, the overhead is spread across a larger volume of data. 그러나 변경 내용 적용 비용은 로그가 포함된 디스크의 최대 I/O와 같은 다른 요인에 의해 제어되므로 이 매개 변수를 늘려서 얻을 수 있는 장점이 줄어듭니다.However, the benefit of increasing this parameter drops off as the cost of applying changes is gated by other factors, such as the maximum I/O of the disk that contains the log. 또한 배포 에이전트를 다시 시작해야 하는 오류가 발생할 경우 많은 수의 트랜잭션을 롤백하고 다시 적용해야 한다는 것을 고려해야 합니다.Additionally, there is a trade off to be considered: any failure that causes the Distribution Agent to start over must rollback and reapply a larger number of transactions. 네트워크가 불안정한 경우 값을 낮게 설정하면 오류 발생 빈도가 줄어들고 오류가 발생해도 적은 수의 트랜잭션을 롤백하고 다시 적용하면 됩니다.For unreliable networks, a lower value can result in less failures and a smaller number of transactions to rollback and reapply if a failure occurs.

  • 로그 판독기 에이전트에 대해 -PollingInterval 매개 변수의 값을 줄입니다.Decrease the value of the -PollingInterval parameter for the Log Reader Agent.

    -PollingInterval 매개 변수는 게시된 데이터베이스의 트랜잭션 로그에서 복제할 트랜잭션을 쿼리할 빈도를 지정합니다.The -PollingInterval parameter specifies how often the transaction log of a published database is queried for transactions to replicate. 기본값은 5초입니다.The default is 5 seconds. 이 값을 줄이면 로그가 더 자주 폴링되므로 게시 데이터베이스에서 배포 데이터베이스로 트랜잭션을 배달할 때 대기 시간을 줄일 수 있습니다.If you decrease this value, the log is polled more frequently, which can result in lower latency for the delivery of transactions from the publication database to the distribution database. 그러나 자주 폴링하면 서버의 로드가 증가하므로 적절한 대기 시간과 서버 로드 간의 균형을 맞춰야 합니다.However, you should balance the need for lower latency against the increased load on the server from polling more frequently.

    에이전트 프로필 및 명령줄에서 에이전트 매개 변수를 지정할 수 있습니다.Agent parameters can be specified in agent profiles and on the command line. 참조 항목:For more information, see:

  • 복제 에이전트 프로필 작업Work with Replication Agent Profiles

  • 복제 에이전트의 명령 프롬프트 매개 변수 보기 및 수정(SQL Server Management Studio)View and Modify Replication Agent Command Prompt Parameters (SQL Server Management Studio)

  • 복제 에이전트 실행 파일 개념Replication Agent Executables Concepts