다음을 통해 공유


Managed Instance 링크 모범 사례 - Azure SQL Managed Instance

적용 대상:Azure SQL Managed Instance

이 문서에서는 Managed Instance 링크를 사용하여 Azure SQL Managed Instance와 어디서나 호스트되는 SQL Server 인스턴스 간에 데이터를 복제할 때의 모범 사례를 간략하게 설명하며 연결된 복제본 간에 거의 실시간으로 데이터 복제를 제공합니다.

정기적으로 로그 백업 수행

SQL Server가 초기 기본 데이터베이스인 경우, 초기 시드가 완료된 후 SQL Server에서 첫 번째 트랜잭션 로그 백업을 수행하는 것이 중요합니다. 단, Azure SQL Managed Instance에서 데이터베이스 상태가 더 이상 복원 중...이 아니어야 합니다. 그런 다음 SQL Server가 기본 역할에 있는 동안 정상 트랜잭션 로그 파일 크기를 유지하기 위해 SQL Server 트랜잭션 로그 백업을 정기적으로 수행합니다.

링크 기능은 Always On 가용성 그룹을 기반으로 하는 분산 가용성 그룹 기술을 사용하여 데이터를 복제합니다. 분산 가용성 그룹을 사용한 데이터 복제는 트랜잭션 로그 레코드 복제를 기반으로 합니다. 트랜잭션 로그 레코드는 보조 복제본의 데이터베이스에 복제될 때까지 주 SQL Server 인스턴스의 데이터베이스에서 자를 수 없습니다. 네트워크 연결 문제로 인해 트랜잭션 로그 레코드 복제가 느리거나 차단된 경우 기본 인스턴스에서 로그 파일이 계속 증가합니다. 증가 속도는 워크로드의 강도와 네트워크 속도에 따라 달라집니다. 주 인스턴스에서 네트워크 연결 중단이 장기화되고 워크로드가 많은 경우 로그 파일에서 사용 가능한 모든 저장소 공간을 사용할 수 있습니다.

일반 트랜잭션 로그 백업을 수행하면 트랜잭션 로그가 잘립니다. 또한 로그 파일 증가로 인해 기본 SQL Server 인스턴스의 공간이 부족해지는 위험이 최소화됩니다. 로그 백업이 이미 자동으로 수행되므로 SQL Managed Instance가 주 인스턴스인 경우에는 추가 작업이 필요하지 않습니다. SQL Server 주 인스턴스에서 로그 백업을 정기적으로 수행하면 계획되지 않은 로그 증가 이벤트에 대한 데이터베이스 복원력이 향상됩니다. SQL Server 에이전트 작업을 사용하여 일일 로그 백업 작업을 예약하는 것이 좋습니다.

T-SQL(Transact-SQL) 스크립트를 사용하여 이 섹션에 제공된 샘플과 같은 로그 파일을 백업할 수 있습니다. 샘플 스크립트의 자리 표시자를 데이터베이스 이름, 백업 파일의 이름과 경로 및 설명으로 바꿉니다.

트랜잭션 로그를 백업하려면 SQL Server에서 다음 샘플 T-SQL(Transact-SQL) 스크립트를 사용합니다.

-- Execute on SQL Server
-- Take log backup
BACKUP LOG [<DatabaseName>]
TO DISK = N'<DiskPathandFileName>'
WITH NOFORMAT, NOINIT,
NAME = N'<Description>', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 1

다음 T-SQL(Transact-SQL) 명령을 사용하여 SQL Server의 데이터베이스에서 사용하는 로그 공간을 확인합니다.

-- Execute on SQL Server
DBCC SQLPERF(LOGSPACE); 

쿼리 출력은 샘플 데이터베이스 tpcc에 대한 다음 예제와 같습니다.

사용된 로그 파일 크기 및 공간을 보여 주는 명령 결과가 포함된 스크린샷

이 예제에서 데이터베이스는 사용 가능한 로그의 76%를 사용했으며 절대 로그 파일 크기는 약 27GB(27,971MB)입니다. 작업 임계값은 워크로드에 따라 달라집니다. 앞선 예제에서 트랜잭션 로그 크기와 로그 사용 비율은 일반적으로 트랜잭션 로그 백업을 수행하여 로그 파일을 잘라내어 공간 일부를 확보하거나 더 자주 로그 백업을 수행해야 함을 나타냅니다. 또한 트랜잭션 로그 자르기가 열려 있는 트랜잭션에 의해 차단되고 있음을 나타낼 수도 있습니다. SQL Server의 트랜잭션 로그 문제 해결에 대한 자세한 내용은 꽉 찬 트랜잭션 로그 문제 해결(SQL Server 오류 9002)을 참조하세요. Azure SQL Managed Instance에서 트랜잭션 로그 문제를 해결하는 방법에 대한 자세한 내용은 Azure SQL Managed Instance를 사용하여 트랜잭션 로그 오류 문제 해결을 참조하세요.

참고 항목

링크에 참여할 때 자동화된 전체 백업 및 트랜잭션 로그 백업은 주 복제본인지 여부에 관계없이 SQL Managed Instance에서 가져오기됩니다. 차등 백업은 복원 시간이 더 길어질 수 있으므로 수행되지 않습니다.

복제본 간의 성능 용량 일치

링크 기능을 사용하는 경우 보조 복제본이 주 복제본에서 복제를 유지할 수 없거나 장애 조치(failover) 후 성능 문제를 방지하려면 SQL Server와 SQL Managed Instance 간의 성능 용량을 일치시켜야 합니다. 성능 용량에는 CPU 코어(또는 Azure의 vCore), 메모리 및 I/O 처리량이 포함됩니다.

보조 복제본에서 다시 실행 큐 크기를 사용하여 복제 성능을 확인할 수 있습니다. 다시 실행 큐 크기는 보조 복제본에서 다시 실행되기를 기다리는 로그 레코드 수를 나타냅니다. 다시 실행 큐 크기가 지속적으로 높으면 보조 복제본이 주 복제본을 따라잡을 수 없다는 것을 나타냅니다. 다음 방법으로 다시 실행 큐 크기를 확인할 수 있습니다.

  • 주 복제본의 redo_queue_size 동적 관리 뷰의 값입니다.
  • 주 복제본의 InstanceRedoLagReplicationSeconds 값입니다.

다시 실행 큐 크기가 지속적으로 높은 경우 보조 복제본에서 리소스를 늘리는 것이 좋습니다.

인증서 회전

SQL Server에서 데이터베이스 미러링 엔드포인트를 보호하는 데 사용되는 인증서를 수동으로 회전해야 할 수 있습니다. SQL Managed Instance에서 데이터베이스 미러링 엔드포인트를 보호하는 데 사용되는 인증서는 서비스에서 관리되고 자동으로 회전되므로 수동으로 회전할 필요가 없습니다.

SQL Server

SQL Server의 데이터베이스 미러링 엔드포인트를 보호하는 데 사용하는 인증서가 만료되어 링크가 저하 될 수 있습니다. 이 문제를 방지하려면, 인증서가 만료되기 전에 회전해야 합니다.

다음 T-SQL(Transact-SQL) 명령을 사용해 현재 인증서의 만료일을 확인합니다.

-- Run on SQL Server
USE MASTER
GO
SELECT * FROM sys.certificates WHERE pvt_key_encryption_type = 'MK' 

인증서 만료가 임박했거나 이미 만료된 경우, 새 인증서를 만든 다음 기존 엔드포인트를 변경해 현재 인증서를 대체하도록 하면 됩니다.

엔드포인트가 새 인증서를 사용하도록 구성되면, 만료된 인증서를 삭제하면 됩니다.

SQL 관리형 인스턴스

SQL Managed Instance의 데이터베이스 미러링 엔드포인트 인증서는 주기적으로 자동으로 회전됩니다. SQL Server에서 인증서 체인의 유효성 을 성공적으로 검사할 수 있는 한 SQL Managed Instance에서 데이터베이스 미러링 엔드포인트 인증서의 만료 날짜를 모니터링할 필요가 없습니다.

SQL Server에서 인증서 체인의 유효성 검사

참고 항목

인증서 체인은 기존 링크에 대해 주기적으로 유효성을 검사하거나 저하된 링크 문제를 해결해야 합니다. 새 링크를 구성하거나 최근에 SQL Managed Instance에서 인증서 공개 키를 가져와서 SQL Server 로 가져오고 Azure에서 신뢰할 수 있는 루트 인증 기관 키를 SQL Server로 가져오는 섹션의 단계를 완료한 경우 이 섹션을 건너뜁니다.

인증서 체인 관련 문제로 링크가 저하 될 수 있습니다. 이 문제를 방지하려면 SQL Server에서 인증서 체인의 유효성을 정기적으로 검사 합니다.

다음 시나리오에서는 SQL Server의 인증서 체인에 문제가 발생할 수 있습니다.

  • SQL Managed Instance에서 인증서 교체가 예약되었습니다.
  • 데이터베이스 미러링 엔드포인트를 보호하는 데 사용되는 인증서를 삭제하거나 변경하는 등 SQL Server의 인증서를 의도하지 않거나 실수로 변경합니다.

먼저 가져온 MI 엔드포인트 인증서를 확인하기 위해 <ManagedInstanceFQDN> 값을 certificate_id로 교체한 후 SQL Server에서 다음 쿼리를 실행합니다.

-- Run on SQL Server 
USE master 
SELECT name, subject, certificate_id, start_date, expiry_date 
FROM sys.certificates 
WHERE issuer_name LIKE '%Microsoft Corporation%' AND name = '<ManagedInstanceFQDN>' 
GO 

다음으로, 이전 쿼리의 결과에서 <certificate_id> 값을 교체한 다음 SQL Server에서 다음 쿼리를 실행하여 인증서의 유효성을 검사합니다.

-- Run on SQL Server 
USE master
EXEC sp_validate_certificate_ca_chain <certificate_id> 
GO 

Commands completed successfully. Completion time: ... 응답은 MI 엔드포인트 인증서의 유효성을 성공적으로 검사했음을 나타냅니다.

중요합니다

저장 프로시저 sp_validate_certificate_ca_chain 는 호스트 OS 서비스를 사용하여 인증서 유효성 검사를 수행하며, 여기에는 온라인 인증서 해지 검사가 포함될 수 있습니다. 호스트 OS가 인터넷에 액세스하도록 구성되지 않은 경우 인증서 체인이 유효한 경우에도 실행이 실패합니다.

오류가 발생하는 경우 가장 신뢰할 수 있는 완화 방법은 먼저 SQL Managed Instance에서 인증서 공개 키 가져오기 섹션에서 만든 모든 인증서를 삭제하고 SQL Server로 가져와서 Azure에서 신뢰할 수 있는 루트 인증 기관 키를 SQL Server로 가져온 다음 다시 가져와서 인증서 체인을 복원하는 것입니다.

시작 추적 플래그 추가

SQL Server에서 시작 매개 변수로 추가될 때 링크를 통해 데이터 복제 성능을 최적화할 수 있는 두 가지 추적 플래그(-T1800-T9567)가 있습니다. 자세한 내용은 시작 추적 플래그 사용을 참조하세요.

링크를 사용하려면 다음을 수행합니다.

링크에 대해 자세히 알아보려면 다음을 수행합니다.

다른 복제 및 마이그레이션 시나리오의 경우 다음을 고려합니다.