읽기 전용 복제본이 있는 Microsoft SQL Server용 Amazon Relational Database Service(Amazon RDS)가 있습니다. 내 DB 인스턴스에서 다음 중 하나가 표시됩니다.
복제 지연이 갑자기 증가합니다.
인스턴스 수정으로 인해 복제 지연이 발생하기 시작했습니다.
읽기 전용 복제본 인스턴스의 데이터베이스에 액세스할 수 없습니다.
이 문제를 해결하려면 어떻게 해야 합니까?
간략한 설명
Amazon RDS for SQL Server 엔터프라이즈 에디션은 동일한 리전 내에서 읽기 전용 복제본을 생성할 수 있도록 지원합니다. 데이터 복제는 비동기적이며 Always-On 기술을 사용하여 마스터에서 복제본 인스턴스로 데이터를 복제합니다. RDS for SQL 서버는 소스 DB 인스턴스와 읽기 전용 복제본 간의 높은 복제 지연을 완화하기 위해 개입하지 않습니다.
해결 방법
1. Amazon CloudWatch를 사용하여 마스터 및 복제본 인스턴스에서 리소스 사용률을 확인합니다. 향상된 모니터링 및 성능 인사이트 기능을 사용하여 리소스 사용량을 세부적으로 확인할 수 있습니다.
마스터 및 복제본 인스턴스의 지표에 대한 중요 고려 사항입니다.
2. 동일한 인스턴스 클래스, 스토리지 유형, IOPS 수를 사용하여 마스터 및 복제본 인스턴스를 만드는 것이 가장 좋습니다. 이렇게 하면 복제본 인스턴스의 리소스 부족으로 인한 복제 지연을 방지할 수 있습니다. 또한 워크로드에 따라 마스터 인스턴스에 비해 사용량이 적은 경우 읽기 전용 복제본을 확장하거나 축소할 수 있습니다.
3. 복제 지연이 증가하기 시작한 기간을 확인한 후 다음을 수행합니다.
복제 지연의 시작 시간을 기준으로 마스터 인스턴스에서WriteIOPS, WriteThroughput, NetworkReceiveThroughput 및 NetworkTrasmitThroughput 지표를 확인합니다. 지연이 쓰기 작업으로 인한 것인지 확인합니다. 읽기 전용 복제본의 동일한 기간 내 동일한 지표를 확인합니다.
마스터 인스턴스에 장기 실행 트랜잭션이 있는지 확인합니다. 다음은 활성 트랜잭션의 상태를 확인하는 예제 쿼리입니다.
SELECT * FROM sys.sysprocesses WHERE open_tran = 1;
4. 복제본 인스턴스에서 중요한 잠금 대기 또는 교착 상태가 있는지 확인합니다. Select와 DDL/DML 트랜잭션 간에 교착 상태가 발생하여 마스터 인스턴스의 트랜잭션 로그 적용이 지연됩니다.
다음은 차단 여부를 확인하기 위한 예제 쿼리입니다.
SELECT * FROM sys.sysprocesses WHERE blocked > 0;
5. 복제본 지연 및 최대 복제 지연 시간을 확인하기 위한 쿼리합니다.
복제 지연
SELECT AR.replica_server_name
, DB_NAME (ARS.database_id) 'database_name'
, AR.availability_mode_desc
, ARS.synchronization_health_desc
, ARS.last_hardened_lsn
, ARS.last_redone_lsn
, ARS.secondary_lag_seconds
FROM sys.dm_hadr_database_replica_states ARS
INNER JOIN sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
--WHERE DB_NAME(ARS.database_id) = 'database_name'
ORDER BY AR.replica_server_name;
읽기 전용 복제본에서 'last_hardened_lsn' 값이 진행 중인지 확인합니다.
최대 복제 지연
SQL Server의 경우 ReplicaLag 지표는 지연된 데이터베이스의 최대 지연 시간을 초 단위로 나타냅니다. 예를 들어, 두 개의 데이터베이스가 각각 5초와 10초 정도 지연되는 경우 ReplicaLag는 10초입니다. ReplicaLag 지표는 다음 쿼리 값을 반환합니다. 마스터 인스턴스에서 쿼리를 실행합니다.
select max(secondary_lag_seconds) max_lag from sys.dm_hadr_database_replica_states;
6. 읽기 전용 복제본 생성을 시작하면 마스터 인스턴스에서 스냅샷을 가져온 다음 복원하여 읽기 전용 복제본 인스턴스를 생성합니다. 트랜잭션 로그가 다시 재생되어 마스터 인스턴스와 데이터를 동기화합니다. 하지만 새 인스턴스를 만든 후에는 해당 인스턴스가 느리게 로드되어 복제 지연이 발생합니다. 이는 예상된 동작입니다. 지연 로딩의 영향을 최소화하려면 읽기 전용 복제본 생성 시 IO1 유형 스토리지를 사용하고 필요한 경우 다시 GP2로 변환합니다.
7. 마스터 인스턴스에서 배치 내 트랜잭션을 실행합니다. 이렇게 하면 긴 트랜잭션을 실행하지 않고 트랜잭션 로그 파일 크기를 최소로 유지할 수 있습니다. 복제 지연 시간이 길어질 때 필요한 경우가 아니면 복제본 인스턴스를 다시 시작하지 않습니다. 다시 시작할 경우 트랜잭션 로그 재생이 더 지연됩니다.
8. 마스터 또는 복제본 인스턴스의 인스턴스 클래스를 수정하면 일시적인 복제 지연이 발생할 수 있습니다. 이는 로그가 마스터 인스턴스에서 처리되기 때문에 예상된 동작입니다.
스토리지 유형 또는 스토리지 크기를 변경하면 스토리지 최적화가 완료될 때까지 복제 지연에 더 오래 영향을 미칩니다. RDS 인스턴스에서 완료한 스토리지 최적화 비율을 확인할 수 없습니다.
9. 읽기 전용 복제본이 스토리지 가득 참 상태에 도달하면 마스터 인스턴스의 트랜잭션 로그가 처리되지 않고 복제 지연이 증가합니다.
TempDB 또는 임시 테이블 때문에 스토리지 공간이 있다고 의심될 경우 복제본 인스턴스를 다시 시작하여 일시적으로 공간을 확보합니다.
10. 복제 지연 상태에서 별 다른 진행 상황이 확인되지 않는 경우 복제본 인스턴스에서 사용자 데이터베이스의 상태를 확인합니다. 로그를 다시 재생하려면 데이터베이스 상태가 Online이어야 합니다.
다음 사항에 유의하세요.
- 새로 생성된 데이터베이스는 읽기 전용 복제본에서 액세스할 수 있을 때까지 지연 계산에 포함되지 않습니다.
- ReplicaLag는 RDS가 지연을 확인할 수 없는 경우(예: 복제본 설정 도중 또는 읽기 전용 복제본이 오류 상태일 때) -1을 반환합니다.
관련 정보
Amazon RDS에서 Microsoft SQL 서버용 읽기 전용 복제본 사용