HADR_SYNC_COMMIT의 호기심이 기다립니다


11

우리는 HADR_SYNC_COMMIT환경에서 대기에 대한 흥미로운 패턴을 주목 하고 있습니다. 세 개의 복제본이 있습니다. 하나의 기본, 하나의 동기화 보조 및 하나의 비동기 보조가 데이터 센터에 있고 다른 데이터 센터에 ASYNC 복제본이 3 개 더 추가되었습니다 (약 2400 마일 거리).

그 이후로, 우리는 HADR_SYNC_COMMIT대기 시간이 엄청나게 증가하기 시작했습니다 . 활성 세션을 살펴보면 COMMIT TRANSACTIONSYNC 복제본에서 많은 쿼리가 대기 하는 것을 볼 수 있습니다.

스크린 샷 HADR_SYNC_COMMIT에서 6 월 29 일 에 대기중인 점프가 있음을 분명히 알 수 있으며 결국 7 월 1 일 정오에 원격 데이터 센터에서 3 개의 비동기 복제본 중 '2 개'를 떨어 뜨 렸습니다. 그것은 대기 시간을 상당히 줄였습니다.

영상

지금까지 확인한 사항 – 로그 전송 큐, 다시 실행 큐, 마지막 강화 시간 및 원격 복제본의 마지막 커밋 시간. 업무 시간 동안 지속적으로 작은 트랜잭션이 발생하므로 주어진 타임 스탬프 (60KB ~ 1MB)에서 전송 큐가 매우 작습니다.
원격 복제본은 거의 동기화 상태이며 복제본의 개별 lsn에 대한 마지막 커밋 시간과 마지막 강화 시간 사이에는 거의 차이가 없습니다.

네트워크 파이프는 10G이며 전송 버퍼 크기를 256 메가에서 2 기가 트로 수정했습니다. 이는 네트워크가 패킷을 삭제하고 다시 전송한다는 가정하에 이루어졌습니다. 그다지 도움이되지 않는 것 같습니다.

ASYNC 복제본이 HADR_SYNC_COMMIT대기 와 어떤 관련이 있는지 궁금합니다 . SYNC 복제본이이 대기 유형에 의존 해서는 안됩니까? 여기서 무엇을 놓치고 있습니까?


1
실제로 문제가 있습니까? 많은 사람들이 기다림을보고 말하기를, 이것이 가장 높은 기다림입니다. 문제가 될 것입니다! 대기는 숫자 일 뿐이며 항상 가장 높은 숫자가 될 것입니다. 반드시 해결해야 할 성능 문제가있는 것은 아닙니다. 이 기다림에 대해 가장 일반적인 원인을 배제한 것으로 보이며 , 보조자가 뒤지지 않기 때문에이 문제에 많은 에너지를 소비하지 않을 것입니다.
Aaron Bertrand

대기 카운터에 높은 숫자와 함께 다른 증상이 있으며 대기 카운터와 관련이 있습니다.
Aaron Bertrand

@AaronBertrand 그렇습니다. 기본 복제본의 활성 spid는 동기화 보조에서 로그 블록이 강화 될 때까지 기다립니다.이 지연 / 대기 시간으로 인해 애플리케이션 속도가 크게 느려집니다. 7 월 9 일에 pagelatch_up 대기는 스크린 샷에서 tempdb 경합 (pfs 페이지 대기)으로 인한 것이며, dba 측에서 더 많은 파일을 추가했으며 응용 프로그램 담당자는 tempdb에 매우 빈번하게 충돌하는 저장 프로 시저를 조정하여 해당 문제를 완화했습니다. hadr_sync_waits로 돌아 가면 왜 비동기 커밋이 hadr_sync_commits에 영향을 미칩니 까? 감사.
Arun Gopinath

1
대기 시간에는 전송 시간이 포함되어 있고 데이터가 함께 전송되며 비동기는 커밋 ACK를 기다릴 필요가 없습니다. 따라서 동기화 또는 비동기에 관계없이 더 많은 2 차 노드가 있으면 로그 활동을 전송하는 데 더 많은 시간이 소요됩니다 (일부는 동시 시간 일 수 있으므로 반드시 클럭 시간 일 필요는 없음). 네트워크 담당자가 일반적으로 또는 추가 보조를 추가 할 때 과도한 대기 시간이 있는지 확인하도록 할 수 있습니다.
Aaron Bertrand

답변:


7

먼저 귀하의 질문과 관련된 대기 이벤트에 대한 설명은 다음과 같습니다.

동기화 된 2 차 데이터베이스가 로그를 강화하기 위해 트랜잭션 커미트 처리를 기다리는 중입니다. 이 대기 시간은 트랜잭션 지연 성능 카운터에도 반영됩니다. 이 대기 유형은 동기화 된 가용성 그룹에 예상되며 보조 데이터베이스에 로그를 보내고 쓰고 승인하는 시간을 나타냅니다.

https://msdn.microsoft.com/en-us/library/ms179984.aspx

이 메커니즘을 살펴보면 로그 서버가 전송 및 강화되었지만 원격 서버에서 복구가 완료되지 않은 상태가됩니다. 이 경우 추가 복제본을 추가 한 경우 대역폭 요구 사항이 증가하여 HADR_SYNC_COMMIT가 증가 할 수 있습니다. 이 경우 Aaron Bertrand는이 질문에 대한 그의 의견에서 정확히 맞습니다.

출처 : http://blogs.msdn.com/b/psssql/archive/2013/04/26/alwayson-hadron-learning-series-hadr-sync-commit-vs-writelog-wait.aspx

이 대기가 응용 프로그램 속도 저하와 어떻게 관련 될 수 있는지에 대한 질문의 두 번째 부분을 살펴보십시오. 이것은 인과 관계 문제라고 생각합니다. 당신은 당신의 대기 증가와 최근의 사용자 불만을보고 있으며, 이것이 사실이 아닐 때 두 사람이 관계가 있다는 결론을 잠재적으로 잘못 이끌어 가고 있습니다. tempdb 파일을 추가하고 응용 프로그램의 응답 성이 향상되었다는 사실은 데이터베이스가 가용성 그룹에있을 때 암시 적 스냅 숏 격리 수준 오버 헤드의 추가 오버 헤드로 인해 일부 경합 문제가 발생했을 수 있음을 나타냅니다. 이것은 HADR_SYNC_COMMIT 대기와 거의 관련이 없었을 수도 있습니다.

이를 테스트하려면 기본 복제본에서 hadr_db_commit_mgr_update_harden XEvent를보고 확장 된 이벤트 추적을 사용하여 기준을 확보 할 수 있습니다. 기준이 설정되면 복제본을 한 번에 하나씩 다시 추가하고 추적이 어떻게 변경되는지 확인할 수 있습니다. 데이터베이스가없는 볼륨에있는 파일을 사용하고 롤오버 및 최대 크기를 설정하는 것이 좋습니다. 대기 시간과 일치하는 이벤트를 수집하기 위해 필요에 따라 지속 시간 필터를 조정하여 추가 문제점을 해결하고이를 포함해야하는 다른 팀과 연관시킬 수 있습니다.

CREATE EVENT SESSION [HADR_SYNC_COMMIT-Monitor] ON SERVER  -- Run this on the primary replica 
ADD EVENT sqlserver.hadr_db_commit_mgr_update_harden(
    WHERE ([delay]>(10))) -- I strongly encourage you to use the delay filter to avoid getting too many events back, this is measured in milliseconds
ADD TARGET package0.event_file(SET filename=N'<YourFilePathHere>')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.