2009-04-03 3 views
7

우리의 데이터베이스 아키텍처는 동일한 데이터베이스 구조의 인스턴스를 가진 두 개의 Sql Server 2005 서버로 구성됩니다. 하나는 모든 읽기 용이고 다른 하나는 모든 쓰기 용입니다. 우리는 트랜잭션 복제를 사용하여 읽기 데이터베이스를 최신 상태로 유지합니다.트랜잭션 복제에서 1 초 미만의 대기 시간을 얻을 수 있습니까?

두 서버는 실제로 매우 높은 사양이며 (쓰기 서버는 32GB RAM을 가짐) 광섬유 네트워크를 통해 연결됩니다.

이 아키텍처를 결정할 때 우리는 읽기 서버에 복제되는 데이터의 대기 시간이로드에 따라 (수천 밀리 초 정도의) 밀리 초 정도라고 생각하게되었습니다. 실제로 우리는 심지어 가장 단순한 경우조차도 약 2-5 초의 대기 시간을보고 있는데, 이는 만족스럽지 않습니다. 가장 간단한 경우는 DB 작성시 단일 테이블의 단일 행에서 단일 값을 갱신하고 읽기 데이터베이스에서 새 값을 관 {하는 데 걸리는 시간을 확인하는 것입니다.

1 초 미만의 대기 시간을 달성하려면 어떤 요소를 고려해야합니까? 심지어 달성 가능한가?

다른 방법으로 고려해야 할 복제 모드가 있습니까? 데이터 및 로그 파일의 위치에 대한 가장 좋은 방법은 무엇입니까?

편집 조언과 통찰력을위한 모든

감사합니다 - 나는 우리가 가 발생하는 대기 기간이 있다고 생각을 정상; 우리는 기대했던 대기 시간에 관해서 우리의 db 호스팅 회사에 의해 잘못 인도되었습니다!

우리는 (제목 "데이터베이스 확장"에서) this MSDN article의 하단에 설명 된 기술을 사용하고, 우리는이 경고를 제대로 처리하는 데 실패했던

: 전문 등 만드는

결과 데이터베이스는 대기 시간입니다. 이제 쓰기가 독자 데이터베이스에 배포되는 데 시간이 걸릴 것입니다. 그러나 대기 시간에 대처할 수 있다면 확장 가능성은 엄청납니다.

이제 데이터 항목이 "휘발성"인 것으로 간주 될 때 쓰기 데이터베이스에서 읽기를 강제하는 캐싱 메커니즘이 변경되었습니다.

답변

2

아니요. 빠른 하드웨어에서도 SQL Server 트랜잭션 복제로 1 분 미만의 대기 시간을 달성 할 가능성은 거의 없습니다.

대기 시간이 1 - 5 초이면 효과적입니다.

here에서

: 가입자가 게시자의 뒤에 몇 초까지 트랜잭션 복제를 사용

, 그것은 수 있습니다. 대기 시간이 불과 몇 초인 경우 구독자는 보고 서버로 쉽게 사용할 수있어 사용자 쿼리와보고를 부담스럽게 게시자에서 구독자로 오프로드 할 수 있습니다.

구역의 고객 테이블을 사용하는 경우 구독자는 게시자의 뒤로 불과초입니다. 도 인상적이었고, 시간의 60 %는 대기 시간이 2 초임 이하입니다. 시간은 에서 레코드를 삽입하거나 을 게시자에서 업데이트 한 후 실제로 구독 데이터베이스 에 기록됩니다.

+0

그래, 나도 그 기사를 읽을거야 :( –

1

분명히 가능할 것입니다.

내가 볼 것입니다 : 서버가 당신이 < 1 밀리해야 서로 옆에 있으면 모든 문제를
가있는 경우

  • 네트워크
    실행 ping이 두 서버간에 명령 및 참조하십시오. 이 네트워크 트래픽 (볼륨)이 될 수
    서버
  • 병목 1기가바이트/초 구성되지 않은 네트워크 카드처럼

    일부 쿼리에 대한 몇 가지 분석을 수행하고 있는지
  • 안티 바이러스 또는 다른 것들
  • 읽기 데이터베이스의 선택 사항 중 하나가 쓰기를 차단할 수 있는지 확인하십시오.
    (nolock)을 추가하여 분석중인 하나 또는 두 개의 검색어에 차이가 있는지 확인하십시오.

기본적으로 복잡한 시스템이있어서 문제가있는 구성 요소를 확인하고 수정해야합니다.

실행해야하는 리포트/선택 사항을 최신 상태로 유지하려면 트랜잭션 복제가 가장 좋습니다. 로그 가져 오기를하지 않으면 로그 전달을 볼 수 있지만 각 가져 오기와 함께 중단 시간이 추가됩니다.

데이터/로그 파일의 경우 성능이 최대가되도록 별도의 드라이브에 있는지 확인하십시오.

+0

핑 (pms)이 좋지만 (<1ms) 네트워크 트래픽이 매우 낮지 만 테스트에서 한 테이블에 대해 매우 간단한 업데이트를 시도하고 있습니다. –

+0

맞아, 아마 네트워크가 아니야. 업데이트를하는 동안 선택을 실행합니까? 잠금 문제가 될 가능성이 큽니다. – Bravax

+0

@answered Apr 3 at 8:38 Bravax : 트랜잭션 복제를 위해 1 초 미만의 지연을 설명하는 기사 하나를 인용 할 수 있습니까? –

1

트랜잭션 복제에 대해 기억해야 할 점은 단일 업데이트에서 변경 사항이 발생하기 위해 여러 작업이 필요하다는 점입니다.

먼저 원본 테이블을 업데이트합니다. 다음으로 로그 판독기는 변경 내용을 확인하고 변경 내용을 배포 데이터베이스에 씁니다. 다음 배포 에이전트가 배포 데이터베이스에서 새 항목을보고 해당 변경 내용을 읽은 다음 구독자에서 올바른 저장 프로 시저를 실행하여 행을 업데이트합니다.

두 서버에서 명령문 실행 시간을 모니터링하면 몇 밀리 초 만에 실행되는 것을 볼 수 있습니다. 그러나 로그 리더와 배포 에이전트가 당신을 죽일 무언가를해야한다는 것을 기다리는 동안 지연 시간입니다.

진정한 보조 처리 시간이 필요하다면 서버간에 데이터 이동을 처리하기 위해 자체 처리 엔진을 작성하는 것이 좋습니다. SQL Service Broker를 사용하여 모든 것을 SQL Server에 기본으로 제공하고 제 3 자 코드를 작성하지 않아도되므로이 방법으로 처리하는 것이 좋습니다.

관련 문제