패키지 성능 문제 해결

업데이트: 2007년 9월 15일

Integration Services에서는 패키지의 성능 문제를 해결하는 데 사용할 수 있는 기능 및 도구를 제공합니다. 예를 들어 로깅을 통해 패키지에 대한 런타임 정보를 캡처하고 성능 카운터를 사용하여 데이터 흐름 엔진을 모니터링할 수 있습니다. 이 항목에서는 이러한 기능에 대한 정보와 일반적인 성능 문제를 방지하도록 패키지를 디자인하기 위한 제안 사항을 설명합니다.

성능 향상을 위한 데이터 흐름 디자인

패키지에서 다음 제안 사항의 결과를 테스트하여 패키지의 데이터 흐름 성능 문제를 해결할 수 있습니다.

쿼리 최적화

여러 데이터 흐름 구성 요소가 원본에서 데이터를 추출하는 작업이나 참조 테이블을 만드는 조회 작업에 쿼리를 사용합니다. 기본 쿼리는 SELECT * FROM <tableName> 구문을 사용합니다. 이 유형의 쿼리는 원본 테이블의 모든 열을 반환합니다. 디자인 타임에 모든 열을 사용 가능하도록 만들면 조회, 통과 또는 원본 열에서 모든 열을 선택할 수 있습니다. 그러나 사용할 열을 선택한 후에는 사용되는 열만 포함하도록 쿼리를 수정해야 합니다. 쿼리를 작성하는 데는 직접 쿼리를 입력하거나 쿼리 작성기를 사용할 수 있습니다. 행 크기가 작을수록 한 개의 버퍼에 많은 행을 넣을 수 있으며 더 적은 작업으로 데이터 집합 내의 모든 행을 처리할 수 있으므로 여분의 열을 제거하면 패키지 내의 데이터 흐름을 더욱 효율적으로 만들 수 있습니다.

[!참고] Business Intelligence Development Studio에서 패키지를 실행하는 경우 원본에서 데이터 흐름으로 제공되지만 다운스트림 데이터 흐름 구성 요소에서 사용하지 않는 데이터 열에 대한 경고가 SSIS 디자이너의 진행률 탭에 나열됩니다. RunInOptimizedMode 속성을 사용하여 이러한 열을 자동으로 제거할 수 있습니다.

데이터 흐름 작업의 속성 구성

성능에 영향을 주는 다음 데이터 흐름 작업 속성을 구성할 수 있습니다.

  • 버퍼 데이터의 임시 저장소 위치(BufferTempStoragePath 속성)와 BLOB(Binary Large Object) 데이터가 들어 있는 열의 임시 저장소 위치(BLOBTempStoragePath 속성)를 지정합니다. 기본적으로 이 속성 값은 TEMP 환경 변수의 값입니다. 다른 폴더를 지정하여 임시 파일을 다른 하드 디스크 드라이브에 넣거나 여러 드라이브에 분산시킬 수 있습니다. 디렉터리 이름을 세미콜론으로 구분하여 여러 디렉터리를 지정할 수 있습니다.

  • DefaultBufferSize 속성을 설정하여 작업에서 사용되는 버퍼의 기본 크기를 정의하고, DefaultBufferMaxRows 속성을 설정하여 각 버퍼의 최대 행 수를 정의합니다. 기본 버퍼 크기는 10MB이고 최대 버퍼 크기는 100MB입니다. 기본 최대 행 수는 10,000개입니다.

  • EngineThreads 속성을 설정하여 실행 중에 작업에서 사용할 수 있는 스레드 수를 설정합니다. 이 속성은 데이터 흐름 엔진에 사용할 스레드 수에 대한 제안 사항을 제공합니다. 기본값은 5이고 최소값은 2입니다. 그러나 데이터 흐름 엔진은 이 속성 값에 관계없이 필요한 만큼의 스레드만 사용합니다. 동시성 문제를 방지하기 위해 필요한 경우에는 엔진에서 이 속성에 지정된 것보다 많은 수의 스레드를 사용할 수도 있습니다.

  • 데이터 흐름 작업이 최적 모드에서 실행되는지 여부(RunInOptimizedMode 속성)를 나타냅니다. 최적화된 모드는 데이터 흐름에서 사용되지 않은 열, 출력 및 구성 요소를 제거함으로써 성능을 향상시킵니다.

    [!참고] 같은 이름의 속성인 RunInOptimizedMode를 Business Intelligence Development Studio의 프로젝트 수준에서 설정하여 데이터 흐름 작업이 디버깅 중에 최적화된 모드에서 실행되도록 나타낼 수 있습니다. 이 프로젝트 속성은 디자인 타임에 데이터 흐름 작업의 RunInOptimizedMode 속성보다 우선합니다.

데이터 흐름 작업의 버퍼 크기 조정 방법 이해

데이터 흐름 엔진은 단일 데이터 행의 예상 크기를 계산하여 버퍼 크기 조정 작업을 시작합니다. 그런 다음 예상 행 크기를 DefaultBufferMaxRows 값으로 곱하여 버퍼 크기의 예비 작업 값을 구합니다.

  • 결과가 DefaultBufferSize 값보다 크면 엔진은 행 수를 줄입니다.
  • 결과가 내부적으로 계산된 최소 버퍼 크기보다 작으면 엔진은 행 수를 늘립니다.
  • 결과가 최소 버퍼 크기와 DefaultBufferSize 값 사이에 있으면 엔진은 예상 행 크기에 DefaultBufferMaxRows 값을 곱한 값에 가능한 한 근접하게 버퍼 크기를 조정합니다.

버퍼 크기 조정

데이터 흐름 작업의 성능 테스트를 시작할 때는 DefaultBufferSizeDefaultBufferMaxRows의 기본값을 사용합니다. 데이터 흐름 작업에 대한 로깅을 설정하고 BufferSizeTuning 이벤트를 선택하여 각 버퍼에 포함된 행 수를 확인합니다.

버퍼의 크기를 조정하기 전에 불필요한 열을 제거하고 데이터 형식을 적절하게 구성하여 각 데이터 행의 크기를 줄이는 방식으로 성능을 향상시켜 보는 것이 좋습니다.

사용 가능한 메모리가 충분하면 많은 수의 작은 버퍼를 사용하는 것보다는 적은 수의 큰 버퍼를 사용하는 것이 좋습니다. 즉, 데이터를 보관하는 데 필요한 총 버퍼 수를 줄이고 가능한 한 많은 데이터 행을 한 버퍼에 넣어서 성능을 향상시킬 수 있습니다. 최적의 버퍼 수와 버퍼 크기를 확인하려면 DefaultBufferSizeDefaultBufferMaxRows 값으로 시험하면서 BufferSizeTuning 이벤트에서 보고된 정보와 성능을 모니터링합니다.

[!참고] 이 섹션에서 설명하는 데이터 흐름 작업의 속성은 패키지의 각 데이터 흐름 작업에 대해 개별적으로 설정해야 합니다.

불필요한 정렬 방지

정렬은 근본적으로 느린 작업이므로 불필요한 정렬을 방지하면 패키지 데이터 흐름의 성능을 향상시킬 수 있습니다.

원본 데이터가 정렬되었다면 SELECT 쿼리에 ORDER BY 절을 사용했거나 데이터를 정렬 순서로 원본에 삽입한 것이므로 데이터가 정렬되었음을 알리는 힌트를 제공하고 특정 다운스트림 변환의 정렬 요구 사항을 충족시키기 위한 정렬 변환 사용을 방지할 수 있습니다. 예를 들어 병합 및 병합 조인 변환에는 정렬된 입력이 필요합니다. 힌트를 제공하려면 업스트림 데이터 흐름 구성 요소의 출력에서 IsSorted 속성을 True로 설정하고 데이터가 정렬되는 정렬 키 열을 지정하십시오. 자세한 내용은 방법: 출력에 정렬 특성 설정을 참조하십시오.

데이터 흐름에서 데이터를 정렬해야 하는 경우 정렬 연산을 가능한 한 적게 사용하도록 데이터 흐름을 디자인하여 성능을 향상시킬 수 있습니다. 예를 들어 데이터 흐름에서 멀티캐스트 변환을 사용하여 데이터 집합을 복사하는 경우 변환 후에 여러 출력을 정렬하는 대신 멀티캐스트 변환이 작업을 시작하기 전에 데이터 집합을 정렬할 수 있습니다.

자세한 내용은 정렬 변환, 병합 변환, 병합 조인 변환멀티캐스트 변환을 참조하십시오.

느린 변경 차원 변환 최적화

느린 변경 차원 마법사 및 느린 변경 차원 변환은 거의 모든 사용자의 요구를 충족시키는 범용 도구입니다. 그러나 마법사에서 생성하는 데이터 흐름은 성능이 최적화되어 있지 않습니다.

느린 변경 차원 변환에서 가장 느린 구성 요소는 일반적으로 한 번에 한 행에 대해 UPDATE를 수행하는 OLE DB 명령 변환입니다. 이러한 OLE DB 명령 변환을 대상 구성 요소로 바꾸면 대부분의 경우 느린 변경 차원 변환의 성능을 개선할 수 있습니다. 이러한 대상 구성 요소는 준비 테이블에 업데이트될 모든 행을 저장합니다. 그러면 사용자가 동시에 모든 행에 집합 기반의 단일 Transact-SQL UPDATE를 수행하는 SQL 실행 작업을 추가할 수 있습니다.

고급 사용자는 대규모 차원을 위해 최적화된 느린 변경 차원 처리에 대한 사용자 지정 데이터 흐름을 디자인할 수 있습니다. 이 방법에 대한 설명 및 예는 Microsoft 백서 Project REAL: 비즈니스 인텔리전스 ETL 디자인 연습(Project REAL: Business Intelligence ETL Design Practices)에서 "고유한 차원 시나리오(Unique dimension scenario)" 섹션을 참조하십시오.

집계 변환의 집계 최적화

집계 변환에는 성능을 향상시키는 데 사용할 수 있는 많은 속성이 제공됩니다. 데이터 집합에 있는 키의 정확한 값 또는 근사치를 아는 경우 KeysKeysScale 속성을 설정할 수 있습니다. 또한 CountDistinctKeysCountDistinctScale 속성을 설정하여 COUNT DISTINCT 연산에 대해 변환이 처리할 키의 정확한 개수 또는 근사치를 지정할 수 있습니다. 이러한 속성을 사용하면 변환은 캐시된 합계의 재구성을 방지하여 성능이 향상됩니다

한 개의 데이터 흐름 내에 여러 집계를 만들어야 하는 경우 여러 변환을 만드는 대신 하나의 집계 변환을 사용하는 여러 집계를 만들어야 합니다. 이 방법을 사용하면 특히 집계가 다른 집계의 하위 집합인 경우 성능이 향상되는데 이는 변환이 내부 저장소를 최적화할 수 있고 들어오는 데이터의 스캔을 한 번만 수행할 수 있기 때문입니다. 예를 들어 집계에서 GROUP BY 절 및 AVG 집계를 사용하는 경우 이를 하나의 변환으로 조합하면 성능을 향상시킬 수 있습니다. 그러나 하나의 집계 변환에서 여러 집계를 수행하면 집계 연산이 직렬화되므로 이 방식은 메모리에 제한이 있는 경우에만 사용해야 합니다.

자세한 내용은 집계 변환을 참조하십시오.

병합 조인 변환의 버퍼 스로틀 구성

병합 조인 변환은 입력할 때마다 한 번에 활성화할 수 있는 최대 버퍼 수를 지정하는 MaxBuffersPerInput 속성을 포함합니다. 이 속성을 사용하여 버퍼가 소비하는 메모리 양을 조정하고 이에 따라 변환 성능을 조정할 수 있습니다. 버퍼 수가 클수록 변환에 더 많은 메모리를 사용하며 성능이 향상됩니다. MaxBuffersPerInput의 기본값은 5이며, 이 버퍼 수는 대부분의 시나리오에서 잘 작동합니다. 성능을 조정하기 위해 4 또는 6 등으로 버퍼 수를 약간 변경해 볼 수 있습니다. 가능하면 버퍼 수를 너무 적게 변경하지 마십시오. 예를 들어 MaxBuffersPerInput을 5 대신 1로 설정하면 성능에 심각한 영향을 줄 수 있습니다. 또한 MaxBuffersPerInput을 0으로 설정하지 마십시오. 이 값을 설정하면 스로틀이 발생하지 않으며 데이터 로드 및 사용 가능한 메모리 양에 따라 패키지가 완료되지 않을 수 있습니다.

교착 상태가 발생하지 않도록 병합 조인 변환이 사용하는 버퍼 수를 MaxBuffersPerInput 값보다 큰 값으로 임시적으로 늘릴 수 있습니다. 교착 상태가 해결되면 MaxBuffersPerInput은 해당 구성 값으로 되돌립니다.

자세한 내용은 병합 조인 변환을 참조하십시오.

대상 성능 테스트

대상에 데이터를 저장하는 데는 예상보다 많은 시간이 소모됩니다. 대상의 낮은 데이터 처리 능력으로 인해 속도 저하가 일어났는지 여부를 식별하려면 임시로 대상을 행 개수 변환으로 대체하십시오. 처리량이 크게 향상되면 데이터를 로드하는 대상에서 속도 저하가 일어난 것입니다. 자세한 내용은 행 수 변환을 참조하십시오.

패키지 성능 모니터링

Integration Services에서는 패키지 성능을 모니터링하는 데 사용할 수 있는 도구 및 기능을 제공합니다. 다음 제안 사항을 통해 패키지에서 성능에 큰 영향을 주는 부분을 확인하십시오.

진행률 탭의 정보 검토

SSIS 디자이너는 Business Intelligence Development Studio에서 패키지를 실행할 때 제어 흐름과 데이터 흐름 모두에 대한 정보를 제공합니다. 진행률 탭에는 작업과 컨테이너가 실행 순서대로 나열되며 패키지 자체를 포함하여 각 작업 및 컨테이너에 대한 시작 및 종료 시간, 경고 및 오류 메시지가 표시됩니다. 또한 데이터 흐름 구성 요소가 실행 순서대로 표시되고, 진행률(완료율로 표시)과 처리된 행 수에 대한 정보가 포함됩니다.

패키지의 로깅 구성

Integration Services에서는 패키지가 런타임 정보를 여러 형식의 파일 또는 SQL Server에 기록할 수 있도록 해주는 다양한 로그 공급자를 제공합니다. 작업 및 컨테이너와 같은 개별 패키지 개체 및 패키지 자체에 대한 로그 항목을 활성화할 수 있습니다. Integration Services에서는 광범위한 작업 및 컨테이너를 포함하며 각 작업 및 컨테이너가 자체 설명 로그 항목 집합을 가집니다. 예를 들어 SQL 실행 작업을 포함하는 패키지는 작업이 실행되는 SQL 문과 문의 매개 변수 값을 나열하는 로그 항목을 작성합니다.

로그 항목이 제공하는 패키지 및 패키지 개체의 시작 시각 및 종료 시간과 같은 정보를 사용하여 느리게 실행되는 작업 및 컨테이너를 식별할 수 있습니다. 자세한 내용은 패키지 실행 로깅, 패키지에서 로깅 구현로깅할 메시지 사용자 지정을 참조하십시오.

데이터 흐름 작업에 대한 로깅 구성

데이터 흐름 작업에서는 성능을 모니터링하고 조정하는 데 사용할 수 있는 여러 가지 사용자 지정 로그 항목을 제공합니다. 예를 들어 메모리 손실을 유발할 수 있는 구성 요소를 모니터링하거나 특정 구성 요소를 실행하는 데 소요되는 시간을 추적할 수 있습니다. 이러한 사용자 지정 로그 항목의 목록과 예제 로깅 출력은 데이터 흐름 작업을 참조하십시오.

데이터 흐름 엔진의 성능 모니터링

Integration Services에서는 데이터 흐름 엔진의 성능을 모니터링하기 위한 성능 카운터 집합을 제공합니다. 예를 들어 모든 버퍼에서 사용하는 총 메모리 양(바이트)을 추적하고 구성 요소에서 메모리가 부족한지 여부를 확인할 수 있습니다. 버퍼는 구성 요소에서 데이터를 저장하는 데 사용하는 메모리 블록입니다. 자세한 내용은 데이터 흐름 엔진의 성능 모니터링을 참조하십시오.

참고 항목

작업

패키지 개발 문제 해결

개념

패키지 실행 문제 해결
Integration Services 서비스 문제 해결

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2007년 9월 15일

변경된 내용
  • 느린 변경 차원 변환 최적화에 대한 새로운 섹션을 추가했습니다.

2006년 7월 17일

변경된 내용
  • 대상 성능을 조정하고 로깅을 사용하는 방법에 대한 새 섹션을 추가했습니다.

2005년 12월 5일

변경된 내용
  • 병합 조인 변환의 버퍼 스로틀에 대한 섹션을 추가했습니다.