다음을 통해 공유


SQL Server에서 미러된 데이터베이스에 대한 성능 최적화

이 문서에는 Microsoft Fabric의 SQL Server에서 원본 데이터베이스 및 미러된 데이터베이스의 성능을 최적화하는 중요한 단계가 포함되어 있습니다.

스캔 성능 제어

데이터베이스의 테이블에서 미러링을 사용하도록 설정하면 검사 프로세스는 트랜잭션 로그를 수집하여 변경 내용을 주기적으로 캡처합니다. 이 프로세스는 복제되지 않은 가장 오래된 커밋된 트랜잭션의 LSN에서 시작하고, 다음으로 나오는 N-1개의 복제된 트랜잭션을 탐색합니다. 여기서 N은 @maxtrans 매개 변수를 사용하여 sys.sp_change_feed_configure_parameters 지정된 트랜잭션 수를 나타냅니다. 매개 변수 값은 maxtrans 각 검색 주기에서 처리할 최대 트랜잭션 수를 나타냅니다.

검사 대기 시간이 매우 높은 경우 더 높은 maxtrans 값을 사용하는 것이 유리할 수 있지만, 드물게 복제되거나 상대적으로 큰 트랜잭션과 관련된 경우 더 낮은 maxtrans 설정이 바람직할 수 있습니다. 동적 최대 트랜잭션 기능은 로그 사용량, 검색 대기 시간 및 워크로드와 같은 다른 요인에 따라 각 검사 중에 최적 maxtrans 값을 자동으로 결정하여 이 프로세스를 간소화합니다. dynamicmaxtrans 변경 피드 설정을 사용하도록 설정하면 Fabric은 maxtrans 매개 변수를 동적으로 조정하여 최적의 검사 성능을 보장합니다.

sys.sp_help_change_feed_settings 사용하여 동적 최대 트랜잭션 기능의 설정을 확인하거나 확장 이벤트를 사용하여 repl_logscan_dynamic_maxtrans 각 검사에 대한 런타임 값을 모니터링합니다.

동적 최대 트랜잭션 기능을 사용하도록 설정하려면 .로 @dynamicmaxtrans설정합니다1. 다음은 그 예입니다.

USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters
  @dynamicmaxtrans=1;

동적 최대 트랜잭션 기능에 대한 최대 및 하한을 수정하려면 각각을 사용합니다 @maxtrans@dynamicmaxtranslowerbound . 다음은 그 예입니다.

USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters
  @dynamicmaxtrans=1
, @dynamicmaxtranslowerbound=5
, @maxtrans=5000;

동적 최대 트랜잭션 설정에 대한 고려 사항

동적 최대 트랜잭션 기능은 SQL Server 2025에서 기본적으로 사용하도록 설정됩니다. 동적 최대 트랜잭션 기능이 사용하도록 설정되어 있으며 Azure SQL Database 및 Azure SQL Managed Instance에서 관리하거나 사용하지 않도록 설정할 수 없습니다.

동적 maxtrans를 사용하도록 설정하면 미러링이 로그 검색 단계 동안 최대 10,000개의 트랜잭션(기본적으로) 또는 구성된 최대 트랜잭션 값을 처리합니다. 이 단계가 너무 오래 실행되지 않도록 3분 제한 시간이 적용됩니다. 제한 시간이 만료되기 전에 처리된 모든 트랜잭션은 미러된 데이터베이스에 게시되고 나머지 트랜잭션은 다음 검사 중에 캡처됩니다.

동적 최대 트랜잭션 기능에 대한 최적 값은 워크로드, 대기 시간 및 기타 요인에 따라 달라집니다. 대기 시간이 원하는 것보다 높고 transaction_count 각 일괄 처리에서 하한 설정(기본적으로 200)보다 큰 경우 동적 maxtrans 기능을 켜는 것이 좋습니다. 이는 latency 열에서 또는 sys.dm_change_feed_log_scan_sessions 확장 이벤트를 사용하여 repl_logscan_dynamic_maxtranscurrent_maxtrans 집합에 도달하는지 확인할 수 있습니다. 대기 시간이 여전히 높은 경우 maxtrans 사용하여 상한을 늘리는 것이 좋습니다.

확장 이벤트를 repl_logscan_dynamic_maxtrans 사용하여 시간 제한이 자주 발생하는지 모니터링합니다. 검사에서 시간 제한이 발생하면 필드 prev_phase2_scan_termination_reasonLogScanTerminationReason_MaxScanDurationReached 값을 갖게 됩니다. 자주 시간 초과가 발생하는 경우, maxtrans를 낮추거나 sys.sp_help_change_feed_settings를 사용하여 동적 maxtrans를 비활성화하는 것이 좋습니다.

SQL Server 미러링을 위한 리소스 관리자

SQL Server 2025에서는 리소스 관리자 풀을 만들어 SQL Server에서 패브릭 미러링의 워크로드를 관리하고 제한할 수 있습니다. 리소스 관리자를 사용하여 데이터베이스 엔진 리소스 소비를 관리하고 사용자 워크로드에 대한 정책을 적용할 수 있습니다. 리소스 관리자를 사용하면 사용자 쿼리 워크로드에서 사용할 수 있는 CPU, 메모리 및 물리적 I/O의 양을 포함하여 다양한 서버 리소스를 예약하거나 제한할 수 있습니다. 이러한 방식으로 패브릭 미러링의 변경 피드 데이터 수집으로 인한 압력으로부터 기본 비즈니스 워크로드를 보호할 수 있습니다. 자세한 내용은 리소스 관리자를 참조하세요.

패브릭 미러링용 SQL Server 2025에서 워크로드 그룹 구성을 시작하려면 다음 샘플 스크립트 및 지침을 사용합니다.

  • RESOURCE POOL의 이름을 아무렇게나 선택할 수 있습니다.
  • 이 샘플 스크립트는 패브릭 미러링을 허용하도록 CPU의 원하는 비율에 대한 한도를 구성합니다. 다음 샘플에서는 50%를 사용합니다 50 . 이 값은 CPU 경합이 있을 때 리소스 풀의 모든 요청이 수신할 수 있는 최대 평균 CPU 대역폭입니다. 더 낮은 값을 사용하여 패브릭 미러링을 추가로 조절합니다.
  • WORKLOAD GROUP 이름은 예제 스크립트의 값과 일치해야 합니다. 각 워크로드 그룹은 특정 미러링 단계에 대한 것입니다. 각 워크로드 그룹은 리소스 관리자 풀 및 워크로드를 계획하는 방법에 따라 동일하거나 다른 풀에 있을 수 있습니다.
  • SQL Server 인스턴스에서 처음으로 리소스 관리자를 구성하기 전에 리소스 관리자 설명서, 예제 및 모범 사례를 주의 깊게 검토합니다.
--Create resource pool for Fabric mirroring
CREATE RESOURCE POOL [ChangeFeedPool] WITH (MAX_CPU_PERCENT = 50);

--Create workload groups for Fabric mirroring. Do not modify.
CREATE WORKLOAD GROUP [x_ms_reserved_changefeed_snapshot_group] USING [ChangeFeedPool];
CREATE WORKLOAD GROUP [x_ms_reserved_changefeed_capture_group] USING [ChangeFeedPool];
CREATE WORKLOAD GROUP [x_ms_reserved_changefeed_publish_group] USING [ChangeFeedPool];
CREATE WORKLOAD GROUP [x_ms_reserved_changefeed_commit_group] USING [ChangeFeedPool];
CREATE WORKLOAD GROUP [x_ms_reserved_changefeed_notification_group] USING [ChangeFeedPool];

변경 내용을 적용하고 리소스 관리자를 사용하도록 설정하려면:

ALTER RESOURCE GOVERNOR RECONFIGURE