SQL Server 2016 향상된 복제 기능 – 배포 데이터베이스 클린업 향상

 

·      Version : SQL Server 2016 SP2, 2012 SP4 이후

 

SQL Server 2016 SP2 에서 복제 기능 향상으로 배포 데이터베이스를 클린업 할때 사용자가 일괄 삭제에 대한 입력 값을 정의할  있으며 대량 삭제 작업시 시스템이 자동으로 삭제 비율을 조정   있도록 변경되었다.

 

복제의 배포 데이터베이스는 전체 복제 토폴로지에서 매우 중요한 구성요소이다트랜잭션 복제의 경우 배포 에이전트는 복제 에이전트에 대한 복제 메타 데이터와 기록을 저장하는  외에도 구독자에게 전달  트랜잭션과 명령에 대한 중간 저장소를 제공한다 이러한 트랜잭션과 명령은 MSRepl_Transactions MSRepl_Commands 테이블에 저장된다트랜잭션수가 매우 많은 게시자를 포함하는 트랜잭션 복제 토폴로지에서는 배포 데이터베이스의 MSRepl_Commands  MSRepl_Transactions 테이블이 상당히 커질  있다.

 

배포 서버에서 10분마다 실행되는 배포 클린업 작업은 지정된 트랜잭션 보존기간(기본 72시간) 기준으로 오래된 트랜잭션  명령을 삭제한다또한 배포 클린업 작업은 배포 서버에서 만료된 구독을 삭제한다.


 

배포 데이터베이스 클린업에서 사용자가 오해하는 부분이 있는데 동일한 게시 데이터베이스에 여러 트랜잭션 또는 스냅샷 게시가 있고 이러한 게시에 대한 클린업 작업을  배포 에이전트가 서로 다른 간격으로 실행되도록 구성하는 경우 클린업은 72시간 보다 오래된 데이터를 삭제하지 않을  있다 이유는 배포 에이전트는 개별 게시자 데이터베이스에 대한 개별 배포 에이전트가 아닌 게시자 데이터베이스 기반으로 @max_cleanup_xact_seqno 계산하기 때문이다.

 

트랜잭션이 많은 환경에서 배포 클린업 작업은 많은 양의 만료된 트랜잭션  명령을 삭제해야한다클린업 작업은 while 루프를 사용하여 MSRepl_Commands  MSRepl_Transactions 항목을  2000  5000행씩 일괄 삭제 한다. MSRepl_Commands MSRepl_Transactions 테이블 크기에 따라 삭제 시간이 오래 걸리수 있으므로 잠금  차단 또는 복제 에에전트 실패와 같은 여러가지 성능 문제가 발생할  있다.  복제 테이블의 크기가 작을 때는 문제 없지만  200~ 300  이상의  테이블 경우 성능 문제가 발생할  있다.

 

향상된 배포 클린업 기능으로는 삭제 프로시저에서 사용할 일괄 처리 행수를 사용자가 정의할  있다만약 매개 변수를 명시적으로 정의하지 않으면 기본값(batch size = 2000, row = 5000) 사용한다.   또한  반복마다 일괄 처리 크기를 이전의 반복 성능에 따라 배치 크기를 늘리거나 줄인다삭제 쿼리가 수행한 시간이 이전 실행과 비교하여 50% 향상되면 배치 크기 값을 20% 까지 증가하여 최대 50000행까지 증가한다만약 이전 실행과 비교하여  20% 감소하면 배치 크기 값을 50% 감소하고 기본값 2000/5000 으로  MSRepl_Commands  MSRepl_Transactions 각각에 대해 일괄 처리 비율을 조절한다.

 

또한 향상된 기능으로 만료된 구독을 클린업 하는 작업을 기존의 배포 클린업 작업과 분리하였다하루에   실행되도록 등록된 구독 만료 클린업 작업은 배포 데이터베이스 서버에 연결하여 구독 클린업 저장 프로시저를 실행 한다클린업 작업은 삭제된 행의 누적값이 아닌 while루프의 마지막 반복을 기반으로  계수를 보고한다또한 메시지에서 표현되는 값을row/sec 에서row/ms 변경되어 보다 정확한 비율을 제공한다.

 

사용자 정의 파라메터를 지원하기 위해 sp_adddistributiondb 저장 프로시저에  개의 새로운 매개변수 @deletebtchsize_xact  @deletebatchsize_cmd 추가 되었다 매개 변수는 MSRepl_Transactions  MSRepl_Commands 테이블의 일괄 삭제 처리를 제어한다또한 SSMS 변경 사항을 지원하도록 업데이트 되었다.

 

[참고자료]

https://blogs.msdn.microsoft.com/sql_server_team/replication-enhancement-improved-distribution-database-cleanup/

 

 

 

2018-06-08 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

SQL Server, MS SQL, SQL replication, Replication Enhancement, SQL 복제배포 데이터베이스, SQL Server AG, Availability Group, HA



출처: https://sqlmvp.tistory.com/1250?category=618825 [Database Lab]
No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 1250
2146 In-memory optimized table에 사용되는 Hash Index jevida(강성욱) 2019.03.26 433
2145 VM환경에서 AG를 구성하였을때VSS 백업 동작 변경 jevida(강성욱) 2019.03.25 435
2144 SQL Server 2016 향상된 가용성 그룹 – 데이터베이스 수준의 상태 탐지 장애조치 jevida(강성욱) 2019.03.25 464
2143 SQL Server 2016 대용량 데이터 로드시 최소 로깅(minimal logging) 과Batch Size jevida(강성욱) 2019.03.25 376
2142 SQL Server 설치시 발생하는 1638 오류 jevida(강성욱) 2019.03.25 574
2141 SQL Server 666코드의 고유 식별자 오류 jevida(강성욱) 2019.03.25 338
2140 SQL Server AlwaysOn synchronous-commit 환경에서 동기화 레이턴시 트러블슈팅 jevida(강성욱) 2019.03.25 400
2139 SQL Server Scheduling and Yielding 트러블슈팅 jevida(강성욱) 2019.03.25 405
2138 SQL Server 2016 Tempdb 경합(contention) 최적화 jevida(강성욱) 2019.03.25 520
2137 XEvent를 사용하여 Auto tuning 작업 모니터링 jevida(강성욱) 2019.03.25 527
2136 SQL Server In-Memory OLTP에 ASP.NET 세션 상태 저장하기 jevida(강성욱) 2019.03.25 413
2135 SQL Server에서 JSON 데이터 저장하기 jevida(강성욱) 2019.03.25 546
2134 Azure SQL에서 네트워크를 구성하는 방법 jevida(강성욱) 2019.03.25 268
2133 SQL Server 네이티브 컴파일된 저장 프로시저 성능 모니터링 jevida(강성욱) 2019.03.25 521
2132 SQL Server 2017 소규모 시스템에서 향상된 리소스 사용 jevida(강성욱) 2019.03.25 300
2131 클러스터 컬럼스토어 인덱스(Clusterd Columnstore Index)에서 대량 인서트 작업시 발생하는 래치 경합 최소화 트릭 jevida(강성욱) 2019.03.25 449
2130 클러스터 컬럼스토어 인덱스(Clusterd Columnstore Index)에서 대량 인서트 작업시 발생하는 래치 경합 최소화 트릭 jevida(강성욱) 2019.03.25 429
» SQL Server 2016 향상된 복제 기능 – 배포 데이터베이스 클린업 향상 jevida(강성욱) 2019.03.25 336
2128 SQL Server 2017향상된 복제 기능 – 배포 데이터베이스의 AG 지원 jevida(강성욱) 2019.03.25 493
2127 SQL Server 2017 향상된 복제 기능 - 복제에이전트 프로필 매개변수의 동적 새로 고침 jevida(강성욱) 2019.03.25 534





XE Login