2016-09-19 8 views
3

SQL Server 2014 데이터베이스 쌍을 동기 AlwaysOn 가용성 그룹으로 설정했습니다.SQL Server AlwaysOn에서 더티 읽기

두 서버 모두 세션 수 시간이 50 초인 Synchronous commit 가용성 모드로 설정됩니다. 보조는 Read-intent only 읽을 수있는 보조로 설정됩니다.

주에 쓰고 즉시 보조 장치 (ApplicationIntent=ReadOnly 통해)에서 읽으면 일관되게 더티 데이터 (쓰기 전의 상태)를 읽습니다. 내가 글쓰기와 읽기 사이에서 약 1 초간 기다린다면 정확한 데이터를 얻습니다.

이 예상되는 동작입니까? 그렇다면 중등 학교에서 읽는 것이 최신인지 확인하기 위해 할 수있는 일이 있습니까?

기본 버전의 읽기 전용 버전 (장애 조치는 물론)으로 보조 버전을 사용하여 기본 버전의 부하를 줄이고 싶습니다. AlwaysOn..Internally SQL에서 더 잠금 힌트를 사용하지 않는 한 당신은 더러운 얻을 수있는 방법은 없습니다

+0

가능성이 더 나은 트랜잭션 응답 시간 및 처리량 속도가 느려질 수 ://dba.stackexchange.com/ – Liam

+0

"더티 읽기"가 아니라 단지 대기 시간입니다. 읽기 : https://blogs.msdn.microsoft.com/sqlserverstorageengine/2011/12/22/alwayson-readable-secondary-and-data-latency/ – dean

+1

http://dba.stackexchange.com/questions/84420 참조/does-synchronous-commit-availability-mode-replica 사이의 일관성 보장. 간단히 말해서 : 예, 이것은 예상되며, * 대기 시간을 허용 할 수 없다면, 기본 서버에서 읽으십시오.아마도 독서가 최신인지 (방아쇠 등의 타임 스탬프 테이블)를 보장하기 위해 자신의 메커니즘을 생각해 낼 수 있지만, 대부분의 경우 이것은 가치보다 많은 문제가 될 수 있습니다. 어쨌든 하나의 작업 부하에서 복제본을 맹목적으로 섞어서 동기화하지 마십시오. –

답변

2

읽기 ...

당신은 도움이되는 만 설정 세컨더리은 행의 이전 버전을 저장하는 rowversioning 사용합니다 .. 당신이 동기를 사용하는 더

모드를 커밋,이 로그 레코드가 먼저 차에 최선을 다하고 있습니다 보장, 다음 주에 ..

은 당신이보고있는 것은

whitePaper 마약 단속반 ... 데이터 대기 시간 이 시나리오와 관련된 내용입니다. 아래 그림은 이에 대한 이해를 돕는 관련 부분입니다.

보조 복제본에서 실행되는보고 작업 부하는 기본 작업 부하에 따라 일반적으로 몇 초에서 몇 분의 데이터 대기 시간을 필요로합니다 및 네트워크 대기 시간.

보조 복제본을 동기 모드로 구성한 경우에도 데이터 대기 시간이 발생합니다. 동기 복제본이 ACK를 주 노드로 전송하기 전에 커밋 된 트랜잭션의 트랜잭션 로그 레코드를 강화하여 이상적인 조건 (즉, RPO = 0)에서 데이터 손실을 보장하는 것은 사실이지만 REDO 스레드 보조 복제본에서 실제로 연결된 로그 레코드가 데이터베이스 페이지에 적용되었습니다.

따라서 일부 데이터 대기 시간이 있습니다. 비동기 모드에서 보조 복제본을 구성한 경우이 데이터 대기 시간이 더 많은지 궁금 할 수 있습니다. 이것은 대답하기가 더 어려운 질문입니다. 주 복제본과 보조 복제본 간의 네트워크가 트랜잭션 로그 트래픽을 따라 잡을 수없는 경우 (즉, 대역폭이 충분하지 않은 경우) 비동기 복제본이 뒤쳐져 데이터 대기 시간이 길어질 수 있습니다. 동기 복제의 경우

은 불충분 한 네트워크 대역폭은 차에 더 높은 데이터 대기 시간이 발생하지 않습니다하지만 HTTP에 대한 기본 작업