일전에 번역한 1TB 를 1시간에 로드하기를 근간으로 하고 sqlleade.com 의 문서도 읽어보고

여러가지 테스트를 해본 결과, 다음 설정이 베스트가 아닌가 싶다.

A서버(2000 or 2005) -> B서버(2005) 로 BIG_TABLE 을 이관한다고 가정하면

1. B서버에 SSIS 를 설치하고

2. B서버에 BIG_TABLE 을 생성. clustered index 도 생성해줌. 2005라면 파티션드 테이블로 함. 파티션을 n개로 했다면...

3. A서버의 BIG_TABLE을 읽어서 B서버의 BIG_TABLE로 FastLoad 하는 n개의 SSIS 패키지를 생성. SSIS와 SQL2005가 같은 머신에 있으면 OLEDB대상 말고 SQL서버 대상으로 함. 이건 Shared Memory를 통해서 DB에 데이터 넣으므로 조금 더 빠름. FastLoad 할 때는 TABLOCK 잡도록 함. 읽어올 때 where 조건은 clustered index 를 기준으로 데이터 안겹치게 함. 파티션 테이블 만들때 기준으로 하면 될 것임. 데이터 읽어올때는 order by clustered index 컬럼을 넣어줌. 이렇게 하면 데이터 들어가는 순서와 클러스터드 인덱스의 정렬순서가 동일하기 때문에 추가적인 부하가 거의 없이 클러스터드 인덱스를 만들 수 있음. 자세한 것은 BOL의 BULK INSERT 성능 최적화 부분을 읽어보면 됨.

4. 패키지를 실행하는 bat파일을 n개 만들고 한꺼번에 실행.

5. 네크웍을 마구 써대면서 테이블에 집어넣음. 테이블에 데이터 넣으면서 블러킹 발생하지 않는지 관찰. 파티션드 테이블이므로 블러킹이 없을 것임. 만약 2000 서버의 통짜 테이블이라면 FastLoad, rows_per_batch = 2500 commit_size = 2500 정도로 하는게 익스텐트 할당할 때 블러킹 거의 없이 잘 들어가는 것 같음.

위와 같이 하면 bcp로 텍스트로 내리는 과정 없이 네트웍타고 바로 넣어버리기 때문에 무쟈게 빠름. 아, 서버간 네트웍은 기가비트 이더넷이고 A서버 B서버 스토리지 모두가 괴물급 스토리지면 완전 대박임.

Posted by maceo

05 18, 2007 20:39 05 18, 2007 20:39
, ,
Response
A trackback , No Comment
RSS :
http://merritt.co.kr/tt/rss/response/98

Trackback URL : http://merritt.co.kr/tt/trackback/98

Trackbacks List

  1. buy adderall

    Tracked from buy adderall 04 8, 2010 08:12 Delete

    Text

Leave a comment
[로그인][오픈아이디란?]
« Previous : 1 : ... 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : ... 74 : Next »

블로그 이미지

가늘어도 긴놈이 장땡

- maceo

Archives

Authors

  1. maceo

Calendar

«   9 2010   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

Site Stats

Total hits:
179781
Today:
28
Yesterday:
67