다음을 통해 공유


sys.dm_hadr_database_replica_states(Transact-SQL)

적용 대상: SQL Server Azure SQL Managed Instance

SQL Server의 로컬 인스턴스가 가용성 복제본을 호스팅하는 Always On 가용성 그룹에 참여하는 각 데이터베이스에 대한 행을 반환합니다. 이 동적 관리 뷰는 주 복제본과 보조 복제본 모두에 대한 상태 정보를 노출합니다. 보조 복제본에서 이 보기는 서버 인스턴스의 모든 보조 데이터베이스에 대한 행을 반환합니다. 주 복제본에서 이 보기는 각 주 데이터베이스에 대한 행과 해당 보조 데이터베이스에 대한 추가 행을 반환합니다.

Important

작업 및 상위 수준 상태에 따라 데이터베이스 상태 정보를 사용할 수 없거나 최신 상태가 아닐 수 있습니다. 또한 값은 로컬 관련성만 있습니다. 예를 들어 주 복제본에서 열 값 last_hardened_lsn 은 보조 복제본에 현재 있을 수 있는 실제 확정된 LSN(로그 시퀀스 번호)이 아니라 주 복제본에서 현재 사용할 수 있는 지정된 보조 데이터베이스에 대한 정보를 반영합니다.

열 이름 데이터 형식 설명(주 복제본)
database_id int SQL Server 내에서 고유한 데이터베이스의 식별자입니다. 이 값은 sys.databases 카탈로그 뷰에 표시된 값과 같습니다.
group_id uniqueidentifier 데이터베이스가 속한 가용성 그룹의 식별자입니다.
replica_id uniqueidentifier 가용성 그룹 내의 가용성 복제본 식별자입니다.
group_database_id uniqueidentifier 가용성 그룹 내의 데이터베이스 식별자입니다. 이 식별자는 이 데이터베이스가 조인된 모든 복제본에서 동일합니다.
is_local bit 가용성 데이터베이스가 로컬인지 여부는 다음 중 하나입니다.

0 = 데이터베이스가 SQL Server 인스턴스에 로컬이 아닙니다.
1 = 데이터베이스가 서버 인스턴스에 로컬입니다.
is_primary_replica bit 복제본이 주 복제본인지 또는 0 보조 복제본인지 여부를 반환 1 합니다.

적용 대상: SQL Server 2014(12.x) 이상 버전.
synchronization_state tinyint 다음 값 중 하나인 데이터 이동 상태입니다.

0 = 동기화되지 않습니다. 주 데이터베이스의 경우 데이터베이스가 해당 보조 데이터베이스와 트랜잭션 로그를 동기화할 준비가 되지 않음을 나타냅니다. 보조 데이터베이스의 경우 이 값은 연결 문제로 인해 데이터베이스가 로그 동기화를 시작하지 않았거나, 일시 중단 중이거나, 시작 또는 역할 스위치 중에 전환 상태를 거치고 있음을 나타냅니다.

1 = 동기화. 주 데이터베이스의 경우 데이터베이스가 보조 데이터베이스의 검사 요청을 수락할 준비가 되었음을 나타냅니다. 보조 데이터베이스의 경우 데이터베이스에 대해 활성 데이터 이동이 발생했음을 나타냅니다.

2 = 동기화되었습니다. 주 데이터베이스가 SYNCHRONIZING대신 표시됩니다SYNCHRONIZED. 로컬 캐시에 데이터베이스가 장애 조치(failover)가 준비되고 동기화 중이라고 표시되면 동기 커밋 보조 데이터베이스가 동기화된 것으로 표시됩니다.

3 = 되돌리기. 보조 데이터베이스가 주 데이터베이스에서 페이지 가져오기를 현재 진행 중인 경우의 실행 취소 프로세스의 단계를 나타냅니다.

주의: 보조 복제본의 데이터베이스가 상태에 있는 REVERTING 경우 보조 복제본으로 강제 장애 조치(failover)를 수행하면 데이터베이스를 주 데이터베이스로 시작할 수 없는 상태로 남게 됩니다. 데이터베이스를 보조 데이터베이스로 다시 연결해야 하거나 로그 백업에서 새 로그 레코드를 적용해야 합니다.

4 = 초기화. 보조 데이터베이스가 보조 복제본에 배송되고 강화되는 실행 취소 LSN을 따라잡는 데 트랜잭션 로그가 필요한 경우의 실행 취소 단계를 나타냅니다.

주의: 보조 복제본의 데이터베이스가 상태에 있는 INITIALIZING 경우 보조 복제본으로 강제 장애 조치(failover)를 수행하면 데이터베이스를 주 데이터베이스로 시작할 수 없는 상태로 남게 됩니다. 데이터베이스를 보조 데이터베이스로 다시 연결해야 하거나 로그 백업에서 새 로그 레코드를 적용해야 합니다.
synchronization_state_desc nvarchar(60) 데이터 이동 상태에 대한 설명입니다. 다음 중 하나입니다.

NOT SYNCHRONIZING
SYNCHRONIZING
SYNCHRONIZED
REVERTING
INITIALIZING
is_commit_participant bit 0 = 트랜잭션 커밋은 이 데이터베이스와 관련하여 동기화되지 않습니다.

1 = 트랜잭션 커밋은 이 데이터베이스와 관련하여 동기화됩니다.

비동기 커밋 가용성 복제본의 데이터베이스의 경우 이 값은 항상 0입니다.

동기-커밋 가용성 복제본의 데이터베이스의 경우 이 값은 주 데이터베이스에서만 정확합니다.
synchronization_health tinyint 가용성 복제본의 가용성 그룹에 조인된 데이터베이스의 동기화 상태와 가용성 복제본의 가용성 모드(동기-커밋 또는 비동기-커밋 모드)를 반영합니다. 다음 값 중 하나일 수 있습니다.

0 = 정상이 아닙니다. synchronization_state 데이터베이스의 (NOT SYNCHRONIZING)입니다 0 .

1 = 부분적으로 정상입니다. 동기-커밋 가용성 복제본의 데이터베이스는 (SYNCHRONIZING)인 경우 synchronization_state 1 부분적으로 정상으로 간주됩니다.

2 = 정상입니다. 동기-커밋 가용성 복제본의 데이터베이스는 정상(있는 경우synchronization_state)으로 간주되며, 비동기 커밋 가용성 복제본의 데이터베이스는 1SYNCHRONIZING정상(있는 경우synchronization_state)으로 간주됩니다.SYNCHRONIZED2
synchronization_health_desc nvarchar(60) 가용성 데이터베이스에 synchronization_health 대한 설명입니다.

NOT_HEALTHY
PARTIALLY_HEALTHY
HEALTHY
database_state tinyint 0 = 온라인
1 = 복원 중
2 = 복구 중
3 = 복구 보류 중
4 = 용의자
5 = 긴급 상황
6 = 오프라인

참고: 다음의 열과 같습니다 state . sys.databases.
database_state_desc nvarchar(60) 가용성 복제본에 database_state 대한 설명입니다.

ONLINE
RESTORING
RECOVERING
RECOVERY_PENDING
SUSPECT
EMERGENCY
OFFLINE

참고: 다음의 열과 같습니다 state_desc . sys.databases.
is_suspended bit 데이터베이스 상태, 다음 중 하나:

0 = 다시 시작됨
1 = 일시 중단됨
suspend_reason tinyint 데이터베이스가 일시 중지된 경우 일시 중지된 상태의 원인이며 다음 중 하나입니다.

0 = 사용자 작업
1 = 파트너에서 일시 중단
2 = 다시 실행
3 = 캡처
4 = 적용
5 = 다시 시작
6 = 실행 취소
7 = 유효성 재검사
8 = 보조 복제본 동기화 지점 계산 오류
suspend_reason_desc nvarchar(60) 데이터베이스 일시 중단 상태 이유에 대한 설명입니다. 다음 중 하나입니다.

SUSPEND_FROM_USER = 사용자가 수동으로 데이터 이동을 일시 중단했습니다.

SUSPEND_FROM_PARTNER = 강제 장애 조치(failover) 후 데이터베이스 복제본이 일시 중단됨

SUSPEND_FROM_REDO = 다시 실행 단계 중에 오류가 발생했습니다.

SUSPEND_FROM_APPLY = 로그를 파일에 쓸 때 오류가 발생했습니다(오류 로그 참조).

SUSPEND_FROM_CAPTURE = 주 복제본에서 로그를 캡처하는 동안 오류가 발생했습니다.

SUSPEND_FROM_RESTART = 데이터베이스를 다시 시작하기 전에 데이터베이스 복제본이 일시 중단되었습니다(오류 로그 참조).

SUSPEND_FROM_UNDO = 실행 취소 단계 중에 오류가 발생했습니다(오류 로그 참조).

SUSPEND_FROM_REVALIDATION = 다시 연결 시 로그 변경 불일치가 검색됨(오류 로그 참조)

SUSPEND_FROM_XRF_UPDATE = 공통 로그 지점을 찾을 수 없습니다(오류 로그 참조).
recovery_lsn numeric(25,0) 주 복제본에서 주 데이터베이스가 복구 또는 장애 조치(failover) 후 새 로그 레코드를 쓰기 전에 트랜잭션 로그의 끝입니다. 지정된 보조 데이터베이스의 경우 이 값이 현재 강화된 LSN()last_hardened_lsnrecovery_lsn보다 작으면 이 보조 데이터베이스를 다시 동기화해야 하는 값입니다(즉, 되돌리고 다시 초기화하기 위해). 이 값이 현재 강화된 LSN보다 크거나 같으면 다시 동기화가 필요하지 않으며 발생하지 않습니다.

recovery_lsn 0으로 패딩된 로그 블록 ID를 반영합니다. 실제 LSN이 아닙니다. 이 값이 파생되는 방법에 대한 자세한 내용은 이 문서의 뒷부분에 있는 LSN 열 값 이해(Understand the LSN column values)를 참조하세요.
truncation_lsn numeric(25,0) 주 복제본에서 주 데이터베이스의 경우 모든 해당 보조 데이터베이스에서 최소 로그 잘림 LSN을 반영합니다. 로컬 로그 잘림이 차단되는 경우(예: 백업 작업) 이 LSN은 로컬 잘림 LSN보다 높을 수 있습니다.

지정된 보조 데이터베이스의 경우 해당 데이터베이스의 잘림 지점을 반영합니다.
truncation_lsn 는 0으로 패딩된 로그 블록 ID를 반영합니다. 실제 로그 시퀀스 번호가 아닙니다.
last_sent_lsn numeric(25,0) 주 복제본을 쿼리할 때 각 보조 복제본 last_sent_lsn 데이터베이스 행에 대해 보고됩니다. 주 데이터베이스에서 모든 로그 블록을 보낸 지점을 나타내는 로그 블록 식별자입니다. 가장 최근에 보낸 로그 블록의 ID가 아니라 전송되는 다음 로그 블록의 ID입니다.

last_sent_lsn 는 0으로 패딩된 로그 블록 ID를 반영합니다. 실제 로그 시퀀스 번호가 아닙니다.
last_sent_time 날짜/시간 주 복제본을 쿼리할 때 각 보조 복제본 last_sent_time 데이터베이스 행에 대해 보고됩니다. 마지막 로그 블록을 보낸 시간입니다.
last_received_lsn numeric(25,0) 보조 복제본을 쿼리할 때 로컬 보조 복제본 last_received_lsn 데이터베이스 행에 대해 보고됩니다. 이 보조 데이터베이스를 호스팅하는 보조 복제본이 모든 로그 블록을 받은 지점을 식별하는 로그 블록 ID입니다.

last_received_lsn 0으로 패딩된 로그 블록 ID를 반영합니다. 실제 로그 시퀀스 번호가 아닙니다.
last_received_time 날짜/시간 보조 복제본을 쿼리할 때 로컬 보조 복제본 last_received_time 데이터베이스 행에 대해 보고됩니다. 마지막으로 받은 메시지의 로그 블록 ID가 보조 복제본에서 읽은 시간입니다.
last_hardened_lsn numeric(25,0) 보조 데이터베이스에서 마지막으로 강화된 LSN의 로그 레코드를 포함하는 로그 블록의 시작입니다.

비동기 커밋 주 데이터베이스 또는 현재 정책이 있는 동기-커밋 데이터베이스에서 값은 delay다음과 같습니다 NULL. 다른 동기 커밋 주 데이터베이스의 경우 모든 보조 데이터베이스 last_hardened_lsn 에서 강화된 LSN의 최소값을 나타냅니다.

참고: last_hardened_lsn 0으로 패딩된 로그 블록 ID를 반영합니다. 실제 로그 시퀀스 번호가 아닙니다. 자세한 내용은 이 문서의 뒷부분에 있는 LSN 열 값 이해(Understand the LSN column values)를 참조하세요.
last_hardened_time 날짜/시간 보조 데이터베이스에서 마지막으로 강화된 LSN(last_hardened_lsn)에 대한 로그 블록 식별자의 시간입니다. 주 데이터베이스에서 확정된 최소 LSN에 해당하는 시간을 반영합니다.
last_redone_lsn numeric(25,0) 보조 데이터베이스에서 마지막으로 다시 실행된 로그 레코드의 실제 로그 시퀀스 번호입니다. 는 last_redone_lsn 항상 .보다 last_hardened_lsn작습니다.
last_redone_time 날짜/시간 보조 데이터베이스에서 마지막 로그 레코드가 다시 실행된 시간입니다.
log_send_queue_size bigint 보조 데이터베이스로 전송되지 않은 주 데이터베이스의 로그 레코드 수(KB)입니다.
log_send_rate bigint 주 복제본 인스턴스가 마지막 활성 기간 동안 데이터를 보낸 평균 속도(KB)/초입니다.
redo_queue_size bigint 아직 다시 실행되지 않은 보조 복제본의 로그 파일의 로그 레코드 수(KB)입니다.
redo_rate bigint 지정된 보조 데이터베이스에서 로그 레코드를 다시 실행 중인 평균 속도(KB)/초입니다.

redo_rate 는 데이터베이스 엔진 시작 이후 다시 실행된 총 로그 바이트를 경과된 시간이 아니라 다시 실행 중일 때의 시간 범위로 나누어 계산됩니다. 다시 실행이 지속적으로 실행되지 않을 수 있으므로 결과 값이 성능 카운터 값 Database Replica:Redone Bytes/sec 과 다를 수 있습니다(더 높음).
filestream_send_rate bigint FILESTREAM 파일이 보조 복제본으로 전송되는 속도(KB)/초를 지정합니다.
end_of_log_lsn numeric(25,0) 로그 LSN의 로컬 끝입니다. 주 및 보조 데이터베이스의 로그 캐시에 있는 마지막 로그 레코드에 해당하는 실제 LSN입니다. 주 복제본에서 보조 행은 보조 복제본이 주 복제본에 보낸 최신 진행률 메시지의 로그 LSN 끝을 반영합니다.

end_of_log_lsn 는 0으로 패딩된 로그 블록 ID를 반영합니다. 실제 로그 시퀀스 번호가 아닙니다. 자세한 내용은 이 문서의 뒷부분에 있는 LSN 열 값 이해(Understand the LSN column values)를 참조하세요.
last_commit_lsn numeric(25,0) 트랜잭션 로그의 마지막 커밋 레코드에 해당하는 실제 로그 시퀀스 번호입니다.

주 데이터베이스에서 처리된 마지막 커밋 레코드에 해당합니다. 보조 데이터베이스의 행에는 보조 복제본이 주 복제본에 보낸 로그 시퀀스 번호가 표시됩니다.
보조 복제본에서 다시 실행된 마지막 커밋 레코드입니다.
last_commit_time 날짜/시간 마지막 커밋 레코드에 해당하는 시간입니다.

보조 데이터베이스에서 이 시간은 주 데이터베이스의 시간과 동일합니다.

주 복제본에서 각 보조 데이터베이스 행은 보조 데이터베이스를 호스트하는 보조 복제본이 주 복제본에 다시 보고한 시간을 표시합니다. 주 데이터베이스 행과 지정된 보조 데이터베이스 행 간의 시간 차이는 다시 실행 프로세스가 catch되고 진행률이 보조 복제본에 의해 주 복제본에 다시 보고되었다고 가정하는 RPO(복구 지점 목표)를 나타냅니다.
low_water_mark_for_ghosts bigint 주 데이터베이스에서 고스트 정리에 사용되는 낮은 워터 마크를 나타내는 데이터베이스의 단조로 증가하는 수입니다. 이 숫자가 시간이 지남에 따라 증가하지 않으면 고스트 정리가 발생하지 않을 수 있음을 의미합니다. 정리할 고스트 행을 결정하기 위해 주 복제본은 주 복제본을 포함한 모든 가용성 복제본에서 이 데이터베이스에 대한 이 열의 최소값을 사용합니다.
secondary_lag_seconds bigint 동기화 중에 보조 복제본이 주 복제본 뒤에 있는 시간(초)입니다.

주 복제본에서 각 보조 데이터베이스에 대한 동기화 지연(지연)은 보조 복제본에서 아직 강화되지 않은 주 복제본에서 가장 먼저 강화된 LSN의 강화 이후의 시간(초)으로 계산됩니다. 이 값은 데이터 이동이 일시 중단된 것처럼 0 표시됩니다. 이 값이 활성 지연을 표시하려면 데이터 이동이 일시 중단되지 않은 상태여야 합니다.

적용 대상: SQL Server 2016(13.x) 이상 버전

LSN 열 값 이해

, , last_hardened_lsn, recovery_lsnlast_received_lsnlast_sent_lsntruncation_lsn 열의 end_of_log_lsn값은 LSN(실제 로그 시퀀스 번호)이 아닙니다. 대신 이러한 각 값은 0으로 패딩된 로그 블록 ID를 반영합니다.

end_of_log_lsn, last_hardened_lsnrecovery_lsn 플러시 LSN입니다. 예를 들어 디스크 last_hardened_lsn 에 이미 있는 블록을 지나서 다음 블록의 시작을 나타냅니다. 따라서 값 last_hardened_lsn 이 적은 LSN은 디스크에 있습니다. 이 값보다 크거나 같은 LSN은 플러시되지 않습니다.

반환 sys.dm_hadr_database_replica_states된 LSN 값 중 실제 LSN만 last_redone_lsn 반환됩니다.

사용 권한

SQL Server 2019(15.x) 및 이전 버전에는 서버에 대한 권한이 필요합니다 VIEW SERVER STATE .

SQL Server 2022(16.x) 이상 버전에는 서버에 대한 권한이 필요합니다 VIEW SERVER PERFORMANCE STATE .