가용성 그룹 복제본 간의 일시적인 연결 시간 제한 문제 해결
이 문서는 가용성 그룹 복제본 간에 보고되는 간헐적인 연결 시간 초과를 진단하는 데 도움이 됩니다.
일시적인 가용성 그룹 복제본 연결 제한 시간의 증상 및 효과
주 복제본과 보조 복제본을 쿼리하면 다른 결과가 반환됩니다.
보조 복제본을 쿼리하는 읽기 전용 워크로드는 부실 데이터를 쿼리할 수 있습니다. 간헐적인 복제본 연결 제한 시간이 발생하면 동일한 데이터를 쿼리할 때 주 복제본 데이터베이스의 데이터 변경 내용이 보조 데이터베이스에 아직 반영되지 않습니다. 자세한 내용은 보조 복제본 섹션의 데이터 대기 시간을 참조하세요.
진단 보고서 가용성 그룹이 동기화되지 않음
SQL Server Management Studio의 Always On 대시보드는 복제본이 동기화되지 않음 상태인 비정상 가용성 그룹을 보고할 수 있습니다. Always On 대시보드 보고서 복제본이 동기화되지 않음 상태인 것을 관찰할 수도 있습니다.
해당 복제본의 SQL Server 오류 로그를 검토할 때 가용성 그룹의 복제본 간에 연결 시간 제한이 있음을 나타내는 다음과 같은 메시지를 관찰할 수 있습니다.
주 복제본의 오류 로그
2023-02-15 07:10:55.500 spid43s Always On availability groups connection with secondary database terminated for primary database 'agdb' on the availability replica 'SQL19AGN2' with Replica ID: {<replicaid>}. This is an informational message only. No user action is required.
보조 복제본의 오류 로그
2023-02-15 07:11:03.100 spid31s A connection time-out has occurred on a previously established connection to availability replica 'SQL19AGN1' with id [<replicaid>]. Either a networking or a firewall issue exists or the availability replica has transitioned to the resolving role.
2023-02-15 07:11:03.100 spid31s Always On Availability Groups connection with primary database terminated for secondary database 'agdb' on the availability replica 'SQL19AGN1' with Replica ID: {<replicaid>}. This is an informational message only. No user action is required.
일시적인 연결 문제는 보조 복제본의 장애 조치(failover) 준비에 영향을 줄 수 있습니다.
자동 장애 조치(failover)를 위해 가용성 그룹을 구성하고 동기 커밋 장애 조치(failover) 파트너가 주 데이터베이스와 간헐적으로 연결이 끊어진 경우 자동 장애 조치(failover)가 실패할 수 있습니다.
쿼리 sys.dm_hadr_database_replia_cluster_states
하여 가용성 그룹 데이터베이스가 해당 시점에 장애 조치(failover) 준비되었는지 여부를 확인할 수 있습니다. 보조 복제본에서 미러링 엔드포인트가 중지된 경우 결과의 예는 다음과 같습니다.
SELECT drcs.database_name, drcs.is_failover_ready, ar.replica_server_name, ars.role_desc, ars.connected_state_desc,
ars.last_connect_error_description, ars.last_connect_error_number, ar.endpoint_url
FROM sys.dm_hadr_availability_replica_states ars JOIN sys.availability_replicas ar ON ars.replica_id=ar.replica_id
JOIN sys.dm_hadr_database_replica_cluster_states drcs ON ar.replica_id=drcs.replica_id
WHERE ars.role_desc='SECONDARY'
장애 조치(failover)가 복제본 연결 시간 제한과 일치하는 경우 자동 장애 조치(failover)는 장애 조치(failover) 파트너 컴퓨터의 주 역할에서 가용성 그룹을 온라인 상태로 전환하지 못할 수 있습니다.
연결 제한 시간 오류는 무엇을 나타내나요?
가용성 그룹 복제본 설정 SESSION_TIMEOUT
의 기본값은 10초입니다. 이 설정은 각 복제본에 대해 구성됩니다. 연결 시간 초과를 보고하기 전에 복제본이 파트너 복제본으로부터 응답을 받기 위해 대기하는 시간을 결정합니다. 복제본이 파트너 복제본에서 응답을 받지 못하면 Microsoft SQL Server 오류 로그 및 Windows 애플리케이션 로그에 연결 시간 초과가 보고됩니다. 제한 시간을 보고하는 복제본은 즉시 다시 연결을 시도하고 5초마다 계속 시도합니다.
일반적으로 연결 시간 제한은 하나의 복제본에서만 검색되고 보고됩니다. 그러나 연결 시간 제한은 두 복제본에서 동시에 보고될 수 있습니다. 이전에 설정된 연결 또는 새 연결을 사용하여 연결 제한 시간이 발생했는지 여부에 따라 이 메시지의 버전이 다릅니다.
Message 35206 A connection timeout has occurred on a previously established connection to availability replica '<replicaname>' with id [<replicaid>]. Either a networking or a firewall issue exists or the availability replica has transitioned to the resolving role.
Message 35201 A connection timeout has occurred while attempting to establish a connection to availability replica '<replicaname>' with id [<replicaid>]. Either a networking or firewall issue exists, or the endpoint address provided for the replica is not the database mirroring endpoint of the host server instance.
파트너 복제본이 시간 초과를 감지하지 못할 수 있습니다. 이 경우 메시지 35201 또는 35206을 보고할 수 있습니다. 그렇지 않은 경우 각 가용성 그룹 데이터베이스에 연결 손실을 보고합니다.
Message 35267 Always On Availability Groups connection with primary/secondary database terminated for primary/secondary database '<databasename>' on the availability replica '<replicaname>' with Replica ID: {<replicaid>}. This is an informational message only. No user action is required.
다음은 SQL Server가 오류 로그에 보고하는 예제입니다. 주 복제본에서 미러링 엔드포인트를 중지하면 보조 복제본이 연결 시간 초과를 검색하고 35206 및 35267 메시지가 보조 복제본 오류 로그에 보고됩니다.
2023-02-15 07:11:03.100 spid31s A connection timeout has occurred on a previously established connection to availability replica 'SQL19AGN1' with id [<replicaid>]. Either a networking or a firewall issue exists or the availability replica has transitioned to the resolving role.
2023-02-15 07:11:03.100 spid31s Always On Availability Groups connection with primary database terminated for secondary database 'agdb' on the availability replica 'SQL19AGN1' with Replica ID:[<replicaid>]. This is an informational message only. No user action is required.
이 예제에서는 주 복제본이 보조 복제본과 계속 통신할 수 있으므로 연결 시간 초과를 감지하지 못했고 각 가용성 그룹 데이터베이스에 대해 메시지 35267을 보고했습니다(이 예제에서는 'agdb' 데이터베이스가 하나뿐임).
2023-02-15 07:10:55.500 spid43s Always On Availability Groups connection with secondary database terminated for primary database 'agdb' on the availability replica 'SQL19AGN2' with Replica ID: {<replicaid>}. This is an informational message only. No user action is required.
복제본 연결 시간 제한의 원인
애플리케이션 문제
SQL Server는 여러 가지 이유로 사용 중일 수 있으며 가용성 그룹 SESSION_TIMEOUT
기간 내에 미러링 엔드포인트 연결을 서비스하지 않습니다. 이로 인해 연결 시간이 초과되었습니다. 이러한 이유 중 일부는 다음과 같습니다.
SQL Server는 100% CPU 사용률을 경험합니다. 즉, SQL Server 또는 일부 다른 애플리케이션은 CPU를 한 번에 몇 초 동안 구동합니다.
SQL Server는 비수익 스케줄러 이벤트를 경험합니다. SQL Server 스레드는 스레드가 적시에 생성되지 않는 경우 작업을 완료하기 위해 다른 스레드에 스케줄러(CPU)를 생성합니다.
SQL Server는 미러링 엔드포인트 연결을 서비스하는 기능에 영향을 주는 작업자 스레드 고갈, 메모리 부족 문제 또는 애플리케이션 문제를 경험합니다.
네트워크 문제
이렇게 하려면 오류가 트리거될 때 주 복제본 및 보조 복제본에서 네트워크 추적 로그를 수집해야 합니다. 이렇게 하려면 네트워크 대기 시간 및 삭제된 패킷을 검사할 수 있습니다.
복제본 연결 제한 시간을 진단하는 방법
SQL Server가 파트너 복제본과의 연결을 서비스하지 못하게 하는 애플리케이션 문제의 경우 이 섹션에서는 SQL Server 로그를 분석하는 방법을 설명합니다. 이러한 팁은 복제본 연결 시간 제한의 근본 원인을 식별하는 데 도움이 될 수 있습니다. 이 섹션은 네트워크 상태를 확인할 수 있도록 연결 제한 시간이 발생할 때 네트워크 추적을 수집하는 방법에 대한 고급 지침으로 끝납니다.
복제본 연결 시간 제한의 타이밍 및 위치 평가
연결 시간 제한의 기록, 빈도 및 추세를 검토합니다. SQL Server 오류 로그에서 찾은 메시지를 사용하는 것이 이 작업을 수행하는 좋은 방법입니다. 연결 시간 제한은 어디에서 보고되는가? 주 복제본 또는 보조 복제본에서 일관되게 보고되고 있나요? 오류는 언제 발생했나요? 그(것)들은 달의 특정 주, 요일, 또는 하루 중 시간에 발생했습니까? 다른 예약된 유지 관리 또는 일괄 처리는 연결 제한 시간이 관찰되는 시간에 해당하나요? 이 평가는 연결 시간 제한의 범위를 지정하고 상관 관계를 지정하여 근본 원인을 식별하는 데 도움이 될 수 있습니다.
AlwaysOn_health 확장 이벤트 세션 검토
확장 이벤트 세션은 AlwaysOn_health
복제본이 파트너 복제본과의 연결을 설정할 때 트리거되는 이벤트를 포함 ucs_connection_setup
하도록 향상되었습니다. 연결 시간 제한 문제를 해결할 때 유용할 수 있습니다.
참고 항목
ucs_connection_setup
확장 이벤트는 최신 SQL Server 누적 업데이트에 추가되었습니다. 이 확장 이벤트를 관찰하려면 최신 누적 업데이트를 실행해야 합니다.
DMV(Always On 분산 관리 뷰) 쿼리
복제본의 연결된 상태에 대한 자세한 내용은 Always On DMV를 쿼리할 수 있습니다. 이 쿼리는 연결된 상태와 문제가 발생할 때 연결 시간 제한과 연결된 오류만 보고합니다. 연결 문제가 간헐적으로 발생하는 경우 쿼리는 연결이 끊긴 상태를 쉽게 캡처하지 못할 수 있습니다.
SELECT ar.replica_server_name, ars.role_desc, ars.connected_state_desc,
ars.last_connect_error_description, ars.last_connect_error_number, ar.endpoint_url
FROM sys.dm_hadr_availability_replica_states ars JOIN sys.availability_replicas ar ON ars.replica_id=ar.replica_id
다음 예제에서는 주 복제본의 미러링 엔드포인트가 중지되었기 때문에 연결이 끊긴 상태를 유지합니다. 주 복제본을 쿼리하여 Always On DMV는 주 복제본 및 모든 보조 복제본에 대해 보고할 수 있습니다(주 복제본에서 엔드포인트를 사용하지 않도록 설정됨).
보조 복제본을 쿼리하여 Always On DMV는 보조 복제본만 보고합니다.
Always On 확장 이벤트 세션 검토
SSMS(SQL Server Management Studio) 개체 탐색기 사용하여 각 복제본에
AlwaysOn_health
연결하고 확장 이벤트 파일을 엽니다.SSMS에서 파일>열기로 이동한 다음 확장 이벤트 파일 병합을 선택합니다.
추가 단추를 선택합니다.
파일 열기 대화 상자에서 SQL Server \LOG 디렉터리의 파일로 이동합니다.
Control 키를 누른 다음 이름이 'AlwaysOn_healthxxx.xel'로 시작하는 파일을 선택합니다.
열기를 선택한 다음 확인을 선택합니다.
AlwaysOn 이벤트를 보여 주는 새 탭 창이 SSMS에 표시됩니다.
다음 스크린샷은 보조 복제본의 데이터를 보여줍니다
AlwaysOn_health
. 첫 번째 개요 상자에는 주 복제본의 엔드포인트가 중지된 후의 연결 손실이 표시됩니다. 두 번째 개요 상자에는 보조 복제본이 주 복제본에 연결을 시도할 때 발생하는 연결 오류가 표시됩니다.
생성되지 않는 이벤트가 연결 시간 초과를 일으키는지 확인합니다.
가용성 복제본이 파트너 복제본 연결을 서비스할 수 없는 가장 일반적인 이유 중 하나는 비수익 스케줄러입니다. 비수익 스케줄러에 대한 자세한 내용은 SQL Server 일정 예약 및 생성 문제 해결을 참조 하세요.
SQL Server는 5~10초의 짧은 비수익 스케줄러 이벤트를 추적합니다. 구성 요소 출력의 TrackingNonYieldingScheduler
데이터 요소에서 sp_server_diagnostics query_processing
이러한 이벤트를 보고합니다.
복제본 연결 제한 시간을 발생시킬 수 있는 생성이 불가능한 이벤트를 확인하려면 다음 단계를 수행합니다.
5초마다 기록하는
sp_server_diagnostics
SQL 에이전트 작업을 만듭니다.연결 시간 초과를 보고하지 않는 서버에서 이 작업을 예약합니다. 즉, 서버 A 복제본이 오류 로그에서 복제본 연결 제한 시간을 보고하는 경우 파트너 복제본인 서버 B에서 SQL 에이전트 작업을 설정합니다. 또는 두 복제본에 연결 제한 시간이 표시되는 경우 두 복제본에서 작업을 만듭니다.
다음 일괄 처리 파일을 실행하여 5초마다 실행되는
sp_server_diagnostics
작업을 만들고, 출력을 텍스트 파일에 추가한 다음, 작업을 시작합니다. 다음 예제sp_server_diagnostics 5
의 명령은 5초마다 실행됩니다. 따라서 이 작업을 5초마다 실행하도록 예약할 필요가 없으며 작업을 시작하고 5초마다 중지될 때까지 실행됩니다.USE [msdb] GO DECLARE @ReturnCode INT SELECT @ReturnCode = 0 DECLARE @jobId BINARY(16) EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'Run sp_server_diagnostics', @owner_login_name=N'sa', @job_id = @jobId OUTPUT /****** Object: Step [Run SP_SERVER_DIAGNOSTICS] Script Date: 2/15/2023 4:20:41 PM ******/ EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Run SP_SERVER_DIAGNOSTICS', @subsystem=N'TSQL', @command=N'sp_server_diagnostics 5', @database_name=N'master', @output_file_name=N'D:\cases\2423\sp_server_diagnostics_output.out', @flags=2 EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)' EXEC sp_start_job 'Run sp_server_diagnostics'
참고 항목
이러한 명령에서 유효한 경로로 변경
@output_file_name
하고 파일 이름을 제공합니다.
결과 분석
연결 제한 시간이 보고되면 SQL Server 오류 로그에 표시되는 제한 시간 이벤트의 타임스탬프를 기록해 둡니다. 다음 예제 SQL19AGN1
의 복제본에 대해 복제본 연결 제한 시간을 보고했습니다. 따라서 파트너 복제본인 SQL19AGN2
SQL 에이전트 작업이 생성되었습니다. 그런 다음 07:24:31에 오류 로그에 SQL19AGN1
연결 시간 초과가 보고되었습니다.
다음으로, sp_server_diagnostics 실행하는 SQL 에이전트 작업의 출력은 보고된 시간 전후에 확인되며, 특히 구성 요소 출력의 TrackingNonYieldingScheduler
데이터 요소를 query_processing
검토합니다. 출력은 복제본 연결 제한 시간이 SQL19AGN1 보고될 무렵(07:24:33) 서버 SQL19AGN2(0이 아닌 16진수 값)가 추적되었다고 보고합니다(07:24:31).
참고 항목
다음 sp_server_diagnostics
출력은 (타임스탬프) 및 query_processing TrackingNonYieldingScheduler
결과를 모두 create_time
표시하기 위해 연결됩니다.
생성하지 않는 스케줄러 이벤트 조사
이전 진단 단계에서 생성되지 않는 이벤트로 인해 복제본 연결 시간 초과가 발생했음을 확인한 경우:
생성되지 않는 이벤트가 실행 중일 때 SQL Server에서 실행 중인 워크로드를 식별합니다.
복제본 연결 제한 시간과 마찬가지로 이러한 이벤트가 발생하는 월, 일 또는 주 동안의 추세를 찾습니다.
비수익 이벤트가 감지된 시스템에서 성능 모니터 추적을 수집합니다.
프로세서::% 프로세서 시간, 메모리::사용 가능한 MBytes, 논리 디스크::Avg 디스크 큐 길이 및 논리 디스크::Avg Disk sec/Transfer를 비롯한 시스템 리소스에 대한 주요 성능 카운터를 수집합니다.
필요한 경우 이러한 비수익 이벤트에 대한 근본 원인을 찾는 데 도움이 되도록 SQL Server 지원 인시던트를 엽니다. 추가 분석을 위해 수집한 로그를 공유합니다.
고급 데이터 수집: 연결 제한 시간 동안 네트워크 추적 수집
SQL Server 애플리케이션의 이전 진단에서 근본 원인을 찾지 못한 경우 네트워크를 확인해야 합니다. 네트워크를 성공적으로 분석하려면 연결 제한 시간을 포함하는 네트워크 추적을 수집해야 합니다.
다음 절차에서는 SQL Server 오류 로그에 연결 시간 초과가 보고되는 복제본에서 Windows netsh
네트워크 추적을 시작합니다. Windows 예약 이벤트 작업은 SQL Server 연결 오류 중 하나가 애플리케이션 로그에 기록될 때 트리거됩니다. 예약된 작업은 주요 네트워크 추적 데이터를 덮어쓰지 않도록 네트워크 추적을 중지 netsh
하는 명령을 실행합니다. 또한 이러한 단계에서는 일괄 처리 및 추적 로그에 대한 *F:* 경로를 가정합니다. 이 경로를 사용자 환경에 맞게 조정합니다.
연결 제한 시간이 발생하는 두 복제본에서 다음 코드 조각과 같이 네트워크 추적을 시작합니다.
netsh trace start capture=yes persistent=yes overwrite=yes maxsize=500 tracefile=f:\trace.etl
이벤트 35206 또는 35267에서 추적을
netsh
중지하는 Windows 예약 작업을 만듭니다. 관리 명령줄에서 다음 작업을 만들 수 있습니다.schtasks /Create /tn Event35206Task /tr F:\stoptrace.bat /SC ONEVENT /EC Application /MO *[System/EventID=35206] /f /RL HIGHEST schtasks /Create /tn Event35267Task /tr F:\stoptrace.bat /SC ONEVENT /EC Application /MO *[System/EventID=35267] /f /RL HIGHEST
이벤트가 발생하고 네트워크 추적이 중지되고 캡처된 후 작업을 삭제할
ONEVENT
수 있습니다.PS C:\Users\sqladmin> Schtasks /Delete /tn Event35206Task /F PS C:\Users\sqladmin> Schtasks /Delete /tn Event35267Task /F
네트워크 추적 분석은 이 문제 해결사를 다루지 않습니다. 네트워크 추적을 해석할 수 없는 경우 Microsoft SQL Server 지원 팀에 문의하고 근본 원인 분석을 위해 요청된 다른 로그 파일과 함께 추적을 제공합니다.
연결 시간 초과를 완화하기 위해 수행할 수 있는 다른 작업은 무엇인가요?
기본 가용성 그룹은 SESSION_TIMEOUT
10초 동안 구성됩니다. 가용성 그룹 복제본 SESSION_TIMEOUT
속성을 조정하여 연결 시간 초과를 완화할 수 있습니다. 이 설정은 복제본별로 설정됩니다. 주 복제본과 영향을 받는 각 보조 복제본에 맞게 조정합니다. 구문의 예는 다음과 같습니다. 기본값 SESSION_TIMEOUT
은 10입니다. 따라서 다음 값으로 15를 사용할 수 있습니다.
ALTER AVAILABILITY GROUP ag
MODIFY REPLICA ON 'SQL19AGN1' WITH (SESSION_TIMEOUT = 15);