반응형

RetainSameConnection 옵션

 

한대성

MS SQL Server MVP

에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자

 

 

 

이용해서 글에서 소개할 내용을 진행하도록 하겠습니다.

(http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005SSIS&intSeq=2035)

 

 

 

예제가 실행되는 것을 확인하기 위해 프로파일러(Profiler) 띄워놓은 상태에서 패키지를 실행해 봅시다.

 


 

위의 그림과 같이, 실제 Insert 작업 외에 매번 부수적인 쿼리가 수행됩니다. 이런 형태의 쿼리는 DB연결이 설정될 실행되는 쿼리입니다.

 

간단히 설명 드리자면, SSIS 기본 연결 설정 형태는 작업 개체마다 연결을 맺고, 해당 작업이 끝나면 연결을 끊는 형태입니다. 따라서, 만약 동일 데이터베이스에 1000 작업을 한다고 , 1000회의 연결 설정을 맺게 되는 것이지요.

 

경우로만 보면 아주 비효율적인 특성인 것처럼 보이지만, 사실 이러한 특징이 SSIS에서는 개선점이었습니다.

 

동일한 데이터베이스를 쓰는 개의 SQL 실행 작업이 있고, 각각의 SQL 실행 작업은

 

                  WAITFOR DELAY ’00:00:05’

 

같이 5 대기하는 작업으로 구성한 , 실행하면 아래와 같이 처리됩니다.

 

그림 상으로만 보면 병렬 처리를 해야 하는데, 실제 실행된 결과를 보면 10초가 걸렸습니다. 이렇게 10초가 걸린 이유는, 작업 1 작업 2 동일한 연결을 사용하도록 설정되었을 , 연결 개체가 작업 1 전용되기 때문에 작업 2 해당 연결 정보를 얻지 못하고 대기한 , 작업 1 끝난 후에야 작업 2 실행된 것입니다.

 

하지만, SSIS에서는 다음과 같이 정확히 병렬 처리가 됩니다.

 

이는 SSIS 연결 관리자는 연결 개체가 아닌, 연결 정보이기 때문이며 연결을 관리하는 부분은 개별 작업 개체이기 때문입니다.

이에 관해서는 별도의 문서에서 심도 있게 다루겠습니다.

 

 

 

 이와 같은 점이 항상 유리한 것 만은 아닙니다. 그래서 SSIS에서는 이러한 특성을 기존의 방식, 해당 연결을 사용하는 모든 패키지에서는 연결 정보를 끊지 않고 유지시키도록 하는 옵션이 있습니다. (말이 꼬인 것도 같네요. 간단히 말하자면 맺은 연결은 패키지가 끝나기 전에는 끊어버리지 않는다라는 옵션입니다.)

 

연결 관리자에 있는 DB 연결을 선택한 속성을 보면 RetainSameConnection 이라는 옵션이 있으며 기본값이 False입니다. 옵션을 True , 패키지를 실행해 봅시다.

 

 

 

 

 

이전과는 달리 연결을 맺고 끊는 쿼리가 실행이 되지 않습니다.

 

그렇다면 성능차이가 얼마나 될까요?

정확히 측정하기 위해 예제를 조금 바꿔서 10,000 건의 데이터를 이관하는 작업으로 하고, dtexec 커멘드 명령으로 각각 5회씩 수행시켜 보겠습니다.

 


 

RetainSameConnection=false

RetainSameConnection=true

1

69.265

26.536

2

70.232

25.569

3

67.049

25.412

4

67.594

26.551

5

69.140

26.567

평균

68.656

26.127

 

거의 3배에 가까운 성능 차이를 보였습니다.

 

실제 업무 환경에서 이와 같은 반복 작업으로 데이터를 처리하는 경우가 있었는데, 옵션으로 인해 수행 시간이 정도로 단축되었습니다.

 

옵션 하나 바꿨을 뿐인데…… 이렇게 차이가 수도 있습니다.

 

 

옵션은 이러한 특성 외에도 다른 부분에서도 유용하게 사용할 있습니다. 또한 다음 번의 문서로 설명 드리겠습니다.

 

반응형

+ Recent posts