2012-11-16 2 views
2

데이터를 변환하고 변형 된 (2 백만 행) 데이터를 SQL Server에 기록하는 서비스가 실행 중입니다. 프론트 엔드는이 테이블에서 읽습니다.읽기 성능 대비 SQL Server 쓰기 성능 균형을 위해 입력이 필요합니다.

자연스럽게 우리는이 데이터를 가능한 빨리 작성하고 읽기 성능을 희생시키지 않으려 고합니다.

현재 나의 접근 방식은 한 번에 한 서버 씩 개별 행을 작성하는 것입니다. 이것은 잠금을 최소화하는 것으로 보이지만 쓰기 속도는 최적이 아닙니다. 우리는 초당 수천 개의 행을 달성하고 있습니다.

데이터를 대량로드하려고 시도했지만 교착 상태와 시간 초과가 발생합니다. 나는 이것을 삽입/업데이트 할 때 잠금 에스컬레이션으로 인한 것이라고 가정하고 있습니다 (커밋을 256 행 청크로 일괄 처리).

읽기 성능 저하없이 데이터베이스에 레코드를 커밋하는 더 빠른 방법에 대한 아이디어가 있습니까?

일부 세부 정보 : 변환 된 데이터를 다른 테이블의 숫자에있는

  • , 모든 인덱스는 읽기 성능을 최대화합니다.
  • 데이터를 쓰는 데 끊임없이 열려있는 단일 연결을 사용합니다.

답변

1

사용자가 SQL Server 2008 이상을 사용하고 있다고 가정하지만, 그렇다면 테이블 값 매개 변수를 허용하는 저장 프로 시저를 사용합니다. 그런 다음 원하는 배치 크기로 프로 시저를 호출 할 수 있으며 잠금은 해당 행을 삽입하는 데 걸리는 시간 동안 만 유지됩니다. 복사하는 동안 대량 복사 잠금을 유지하면 배치 크기를 변경하더라도 잠금 기간에 큰 영향을 미치지 않습니다 (물론 전체 대량 복사 시간 변경은 제외) .

TVP로 데이터를 제출하기위한 도우미 클래스가있는 블로그 게시물을 쉽게 쓸 수 있습니다. here. 그리고 MSDN here에서 TVP 매개 변수를 사용하여 프로 시저를 만드는 방법을 읽을 수 있습니다. Bob B의 블로그 기사 인 herehere (내 블로그 게시물에서도 참조)을 읽을 가치가 있습니다.