다음을 통해 공유


가용성 그룹 복제본 간의 일시적인 연결 시간 제한 문제 해결

이 문서는 가용성 그룹 복제본 간에 보고되는 일시적인 연결 시간 초과를 진단하는 데 도움이 됩니다.

일시적인 가용성 그룹 복제본(replica) 연결 시간 제한의 증상 및 효과

주 복제본과 보조 복제본을 쿼리하면 다른 결과가 반환됩니다.

보조 복제본을 쿼리하는 읽기 전용 워크로드는 부실 데이터를 쿼리할 수 있습니다. 일시적인 복제본(replica) 연결 제한 시간이 발생하면 동일한 데이터를 쿼리할 때 주 복제본(replica) 데이터베이스의 데이터 변경 내용이 보조 데이터베이스에 아직 반영되지 않습니다. 자세한 내용은 보조 복제본(replica) 데이터 대기 시간 섹션을 참조하세요.

진단 보고서 가용성 그룹이 동기화되지 않음

SQL Server Management Studio Always On dashboard 복제본이 동기화되지 않음 상태인 비정상 가용성 그룹을 보고할 수 있습니다. Always On dashboard 보고서 복제본이 동기화되지 않음 상태인 것을 확인할 수도 있습니다.

동기화되지 않음 상태의 Always On dashboard 보고서 복제본을 보여 주는 스크린샷

해당 복제본의 SQL Server 오류 로그를 검토할 때 가용성 그룹의 복제본 간에 연결 시간 제한이 있음을 나타내는 다음과 같은 메시지가 표시될 수 있습니다.

기본 복제본(replica) 오류 로그

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.

보조 복제본(replica) 오류 로그

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.

일시적인 연결 문제는 보조 복제본(replica) 장애 조치(failover) 준비에 영향을 줄 수 있습니다.

자동 장애 조치(failover)를 위해 가용성 그룹을 구성하고 동기 커밋 장애 조치(failover) 파트너가 주 장애 조치(failover)에서 간헐적으로 연결이 끊어진 경우 자동 장애 조치(failover)가 실패할 수 있습니다.

쿼리 sys.dm_hadr_database_replia_cluster_states 하여 가용성 그룹 데이터베이스가 해당 시점에 장애 조치(failover)가 준비되었는지 여부를 확인할 수 있습니다. 보조 복제본(replica) 미러링 엔드포인트가 중지된 경우 결과의 예는 다음과 같습니다.

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'

보조 복제본(replica) 미러링 엔드포인트가 중지되었음을 보여 주는 스크린샷

장애 조치(failover)가 복제본(replica) 연결 시간 제한과 일치하는 경우 자동 장애 조치(failover)는 장애 조치(failover) 파트너 컴퓨터의 기본 역할에서 가용성 그룹을 온라인 상태로 전환하지 못할 수 있습니다.

연결 시간 제한 오류는 무엇을 나타내나요?

가용성 그룹 복제본(replica) 설정SESSION_TIMEOUT의 기본값은 10초입니다. 이 설정은 각 복제본(replica) 대해 구성됩니다. 복제본(replica) 연결 시간 초과를 보고하기 전에 파트너 복제본(replica) 응답을 받기 위해 대기하는 시간을 결정합니다. 복제본(replica) 파트너 복제본(replica) 응답을 받지 못하면 Microsoft SQL Server 오류 로그 및 Windows 애플리케이션 로그에 연결 시간 초과를 보고합니다. 제한 시간을 보고하는 복제본(replica) 즉시 다시 연결하려고 시도하며 5초마다 계속 시도합니다.

일반적으로 연결 시간 제한은 하나의 복제본(replica) 의해서만 검색되고 보고됩니다. 그러나 두 복제본에서 동시에 연결 시간 초과를 보고할 수 있습니다. 이전에 설정된 연결 또는 새 연결을 사용하여 연결 시간 초과가 발생했는지 여부에 따라 이 메시지의 버전이 다릅니다.

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.

파트너 복제본(replica) 시간 초과를 감지하지 못할 수 있습니다. 이 경우 메시지 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 오류 로그에 보고하는 예제입니다. 기본 복제본(replica) 미러링 엔드포인트를 중지하면 보조 복제본(replica) 연결 시간 초과를 검색하고 보조 복제본(replica) 오류 로그에 메시지 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.

이 예제에서는 주 복제본(replica) 보조 데이터베이스와 계속 통신할 수 있으므로 연결 시간 초과를 감지하지 못했고 각 가용성 그룹 데이터베이스에 대해 메시지 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.

복제본(replica) 연결 시간 제한의 원인

애플리케이션 문제

SQL Server 여러 가지 이유로 사용 중일 수 있으며 가용성 그룹 SESSION_TIMEOUT 기간 내에 미러링 엔드포인트 연결을 제공하지 않습니다. 이로 인해 연결 시간이 초과되었습니다. 이러한 이유 중 일부는 다음과 같습니다.

  • SQL Server CPU 사용률이 100% 발생합니다. 즉, SQL Server 또는 일부 다른 애플리케이션은 한 번에 몇 초 동안 CPU를 구동합니다.

  • SQL Server 비수익 스케줄러 이벤트를 경험합니다. SQL Server 스레드는 스레드가 적시에 생성되지 않는 경우 작업을 완료하기 위해 스케줄러(CPU)를 다른 스레드에 생성합니다.

  • SQL Server 미러링 엔드포인트 연결을 서비스하는 기능에 영향을 주는 작업자 스레드 고갈, 메모리 부족 문제 또는 애플리케이션 문제가 발생합니다.

네트워크 문제

이렇게 하려면 오류가 트리거될 때 주 복제본 및 보조 복제본에서 네트워크 추적 로그를 수집해야 합니다. 이렇게 하려면 네트워크 대기 시간 및 삭제된 패킷을 검사할 수 있습니다.

복제본(replica) 연결 시간 초과를 진단하는 방법

SQL Server 파트너 복제본(replica) 연결을 서비스하지 못하게 하는 애플리케이션 문제의 경우 이 섹션에서는 SQL Server 로그를 분석하는 방법을 설명합니다. 이러한 팁은 복제본(replica) 연결 시간 제한의 근본 원인을 식별하는 데 도움이 될 수 있습니다. 이 섹션은 네트워크 상태 검사 수 있도록 연결 제한 시간이 발생할 때 네트워크 추적을 수집하는 방법에 대한 고급 지침으로 끝납니다.

복제본(replica) 연결 시간 제한의 타이밍 및 위치 평가

연결 시간 제한의 기록, 빈도 및 추세를 검토합니다. SQL Server 오류 로그에서 찾은 메시지를 사용하는 것이 좋습니다. 연결 시간 제한은 어디에서 보고되는가? 기본 또는 보조 복제본(replica) 일관되게 보고되고 있나요? 오류는 언제 발생했나요? 그들은 월의 특정 주, 요일 또는 하루 중 시간에 발생했습니까? 다른 예약된 유지 관리 또는 일괄 처리는 연결 시간 초과가 관찰되는 시간에 해당하나요? 이 평가는 연결 제한 시간을 scope 상관 관계를 지정하여 근본 원인을 식별하는 데 도움이 될 수 있습니다.

AlwaysOn_health 확장 이벤트 세션 검토

확장 이벤트 세션은 AlwaysOn_health 복제본(replica) 파트너 복제본(replica) 연결을 설정할 때 트리거되는 이벤트를 포함 ucs_connection_setup 하도록 향상되었습니다. 이는 연결 시간 제한 문제를 해결할 때 유용할 수 있습니다.

참고

ucs_connection_setup 확장 이벤트는 최신 SQL Server 누적 업데이트에 추가되었습니다. 이 확장 이벤트를 관찰하려면 최신 누적 업데이트를 실행해야 합니다.

DMV(분산 관리 뷰) 쿼리 Always On

복제본(replica) 연결된 상태에 대한 자세한 내용은 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

다음 예제에서는 기본 복제본(replica) 미러링 엔드포인트가 중지되었기 때문에 연결이 끊긴 상태를 유지합니다. 주 복제본(replica) 쿼리하면 Always On DMV가 주 복제본과 모든 보조 복제본에 대해 보고할 수 있습니다(주 복제본(replica) 엔드포인트가 사용하지 않도록 설정됨).

주 복제본(replica) 미러링 엔드포인트가 중지되었기 때문에 연결이 끊긴 상태를 보여 주는 스크린샷

보조 복제본(replica) 쿼리하면 Always On DMV는 보조 복제본(replica) 보고합니다.

보조 복제본(replica) 미러링 엔드포인트가 중지되었기 때문에 연결이 끊긴 상태를 보여주는 스크린샷

Always On 확장 이벤트 세션 검토

  1. SSMS(SQL Server Management Studio) 개체 탐색기 사용하여 각 복제본(replica) 연결하고 확장 이벤트 파일을 엽니다AlwaysOn_health.

  2. SSMS에서 파일>열기로 이동한 다음 확장 이벤트 파일 병합을 선택합니다.

  3. 추가 버튼을 선택합니다.

  4. 파일 열기 대화 상자에서 SQL Server \LOG 디렉터리의 파일로 이동합니다.

  5. Control 키를 누른 다음 이름이 'AlwaysOn_healthxxx.xel'로 시작하는 파일을 선택합니다.

  6. 열기를 선택한 다음 확인을 선택합니다.

    AlwaysOn 이벤트를 보여 주는 새 탭 창이 SSMS에 표시됩니다.

    다음 스크린샷은 보조 복제본(replica) 데이터를 보여줍니다AlwaysOn_health. 첫 번째 개요 상자에는 기본 복제본(replica) 엔드포인트가 중지된 후의 연결 손실이 표시됩니다. 두 번째 개요 상자에는 보조 복제본(replica) 주 복제본(replica) 연결을 시도할 때 발생하는 연결 오류가 표시됩니다.

    보조 복제본(replica) AlwaysOn_health 데이터를 보여 주는 스크린샷

생성되지 않는 이벤트가 연결 시간 초과를 일으키는지 확인합니다.

가용성 복제본(replica) 파트너 복제본(replica) 연결을 서비스할 수 없는 가장 일반적인 이유 중 하나는 비수익 스케줄러입니다. 비수익 스케줄러에 대한 자세한 내용은 예약 및 수율 SQL Server 문제 해결을 참조하세요.

SQL Server 5~10초의 짧은 비수익 스케줄러 이벤트를 추적합니다. 구성 요소 출력의 TrackingNonYieldingScheduler 데이터 요소에서 sp_server_diagnostics query_processing 이러한 이벤트를 보고합니다.

복제본(replica) 연결 시간 초과가 발생할 수 있는 비수익 이벤트에 대해 검사 다음 단계를 수행합니다.

  1. 5초마다 기록하는 sp_server_diagnostics SQL 에이전트 작업을 만듭니다.

  2. 연결 시간 초과를 보고하지 않는 서버에서 이 작업을 예약합니다. 즉, 서버 A 복제본(replica) 오류 로그에 복제본(replica) 연결 시간 초과를 보고하는 경우 파트너 복제본(replica) 서버 B에서 SQL 에이전트 작업을 설정합니다. 또는 두 복제본에 연결 시간 초과가 표시되는 경우 두 복제본에서 작업을 만듭니다.

  3. 다음 일괄 처리 파일을 실행하여 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 의 복제본에서는 복제본(replica) 연결 시간 초과를 보고했습니다. 따라서 에서 SQL 에이전트 작업이 만들어졌SQL19AGN2고 파트너가 복제본(replica). 그런 다음 07:24:31에 SQL19AGN1 오류 로그에 연결 시간 초과가 보고되었습니다.

SQL19AGN1 오류 로그에 보고된 연결 시간 초과를 보여 주는 스크린샷

다음으로, sp_server_diagnostics 실행되는 SQL 에이전트 작업의 출력은 보고된 시간 경에 확인되며, 특히 구성 요소 출력의 TrackingNonYieldingSchedulerquery_processing 데이터 요소를 검토합니다. 출력은 SQL19AGN1(07:24:31)에 복제본(replica) 연결 제한 시간이 보고된 시간(07:24:33)의 서버 SQL19AGN2(0이 아닌 16진수 값)가 추적되었다고 보고합니다.

참고

다음 sp_server_diagnostics 출력은 (타임스탬프) 및 query_processing TrackingNonYieldingScheduler 결과를 모두 create_time 표시하도록 연결됩니다.

출력이 연결된 sp_server_diagnostics 보여 주는 스크린샷

비수익 스케줄러 이벤트 조사

이전 진단 단계에서 비수익 이벤트로 인해 복제본(replica) 연결 시간 초과가 발생했음을 확인한 경우:

  1. 생성되지 않는 이벤트가 실행되는 시점에 SQL Server 실행되는 워크로드를 식별합니다.

  2. 복제본(replica) 연결 시간 제한과 마찬가지로 이러한 이벤트가 발생하는 월, 일 또는 주 동안의 추세를 찾습니다.

  3. 비수익 이벤트가 검색된 시스템에서 성능 모니터 추적을 수집합니다.

  4. 프로세서::% 프로세서 시간, 메모리::사용 가능한 MBytes, 논리 디스크::Avg 디스크 큐 길이 및 논리 디스크::Avg Disksec/Transfer를 비롯한 시스템 리소스에 대한 주요 성능 카운터를 수집합니다.

  5. 필요한 경우 이러한 비수익 이벤트에 대한 근본 원인을 찾는 데 추가 지원을 위해 SQL Server 지원 인시던트 를 엽니다. 추가 분석을 위해 수집한 로그를 공유합니다.

고급 데이터 수집: 연결 제한 시간 동안 네트워크 추적 수집

SQL Server 애플리케이션의 이전 진단이 근본 원인을 생성하지 않은 경우 네트워크를 검사 합니다. 네트워크를 성공적으로 분석하려면 연결 시간 제한 시간을 포함하는 네트워크 추적을 수집해야 합니다.

다음 절차에서는 연결 시간 초과가 SQL Server 오류 로그에 보고되는 복제본에서 Windows netsh 네트워크 추적을 시작합니다. Windows 예약 이벤트 작업은 SQL Server 연결 오류 중 하나가 애플리케이션 로그에 기록될 때 트리거됩니다. 예약된 작업은 주요 네트워크 추적 데이터를 덮어쓰지 않도록 네트워크 추적을 중지 netsh 하는 명령을 실행합니다. 또한 이러한 단계에서는 일괄 처리 및 추적 로그에 대한 *F:*의 경로를 가정합니다. 이 경로를 사용자 환경에 맞게 조정합니다.

  1. 다음 코드 조각과 같이 연결 시간 초과가 발생하는 두 복제본에서 네트워크 추적을 시작합니다.

    netsh trace start capture=yes persistent=yes overwrite=yes maxsize=500 tracefile=f:\trace.etl
    
  2. 이벤트 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
    
  3. 이벤트가 발생하고 네트워크 추적이 중지되고 캡처된 후 작업을 삭제할 ONEVENT 수 있습니다.

    PS C:\Users\sqladmin> Schtasks /Delete /tn Event35206Task /F
    PS C:\Users\sqladmin> Schtasks /Delete /tn Event35267Task /F
    

네트워크 추적 분석은 이 문제 해결사 scope 외부에 있습니다. 네트워크 추적을 해석할 수 없는 경우 Microsoft SQL Server 지원 팀에 문의하고 근본 원인 분석을 위해 요청된 다른 로그 파일과 함께 추적을 제공합니다.

연결 시간 초과를 완화하기 위해 수행할 수 있는 다른 작업은 무엇인가요?

기본 가용성 그룹인 SESSION_TIMEOUT은 10초 동안 구성됩니다. 가용성 그룹 복제본(replica) SESSION_TIMEOUT 속성을 조정하여 연결 시간 초과를 완화할 수 있습니다. 이 설정은 복제본(replica) 따라 설정됩니다. 주 및 영향을 받는 각 보조 복제본(replica) 맞게 조정합니다. 구문의 예는 다음과 같습니다. 기본값 SESSION_TIMEOUT 은 10입니다. 따라서 15를 다음 값으로 사용할 수 있습니다.

ALTER AVAILABILITY GROUP ag
MODIFY REPLICA ON 'SQL19AGN1' WITH (SESSION_TIMEOUT = 15);