C# SQLBulkCopy 기능에 대해서

데이터 동기화를 위해서 SQLBulkCopy를 쓰면서 의아했던 점,

그리고 궁금했던 점을 하나씩 짚고 넘어가면서

최선의 방법을 찾아보자는 생각으로 시작해봅니다.

p.s @Vincent 님 덕분에 공부 많이 됐습니다. 감사합니다!

좋아요 3

BatchSize를 조정하는 이유
DB의 부담을 줄이기 위해서도 맞는 말이다. 실제 BatchSize를 조절해서 테스트한 결과에 따르면 Batch 속도의 차이가 많이 난다.

하지만 정작 중요한 이유는 따로 있더라.

DB 데이터는 어찌됐든 TCP로 전송된다.
한번에 주고 받을 수 있는 길이의 한계가 존재한다.

결국 BatchSize의 조정은 네트워크 대응을 위해 반드시 필요한 것 같다.
확실한지는 모르겠지만 다양한 네트웍 환경에서 BatchSize를 다르게 해서 적용해보면서 경과를 지켜보려 한다.
네트웍이 불안정하거나, 내부 트래픽의 제한이 있는 망에서 테스트한 결과 BatchSize를 3,000 으로만 해도 문제가 되는 것을 확인했다.

좋아요 5

관련 있는 내용인 것 같습니다.

좋아요 2

올려주신 해당 글의 요지는 ‘개발자는 MSS에 대해 그렇게 신경 쓸 필요가 없다’ 인 것 같습니다.
그리고 그게 맞는 말씀 같습니다…

좋아요 2

시간이 조금 지났지만, 후기를 반드시 올려야 할 것 같은 압박감에 댓글을 써봅니다.
결론적으로는 BatchSize의 조정도, MSS를 고려한 효율적인 설계 또한 필요가 없었습니다!!
단지 BulkCopy를 하는 과정에서 '보안프로그램’이라는 무시무시한 놈이 방해공작을 펼치고 있다는 사실을 알게 되었고…
(BulkCopy를 안하는데도 이미지를 저장하는 로직에서 멍때리는 것 보고 직감했음…)
BulkCopy를 과감하게(?) 포기를 하고 상위 데이터베이스에 직접 연결해 그때그때 select하고 처리하는 방식으로 우회하게 되었습니다.

프로젝트의 결과적으로는 대성공이지만… 씁쓸합니다…
DB Write하는 과정 조차 보안프로그램이라는 놈이 이렇게 방해를 할 줄 몰랐으니까요…

좋아요 5

윗 댓글에서 TCP와 통신 데이터 사이즈를 언급하셔서 링크 드린 것입니다.

좋아요 3

프로젝트 성공하신 것 축하드리고…저도 보안 프로그램이 그런 것도 할 수 있다는 것을 배울 수 있었습니다.

후기 감사드립니다.

좋아요 3

네 알고 있습니다. 감사합니다.

좋아요 4