데이터 흐름 성능 기능Data Flow Performance Features

이 항목에서는 일반적인 성능 문제를 방지할 수 있도록 Integration ServicesIntegration Services 패키지를 디자인하는 방법에 대한 제안 사항을 제공합니다.This topic provides suggestions about how to design Integration ServicesIntegration Services packages to avoid common performance issues. 또한 이 항목에서는 패키지의 성능 문제를 해결하기 위해 사용할 수 있는 기능 및 도구에 대한 정보를 제공합니다.This topic also provides information about features and tools that you can use to troubleshoot the performance of packages.

데이터 흐름 구성Configuring the Data Flow

성능 향상을 위해 데이터 흐름 태스크를 구성하려면 태스크의 속성을 구성하고 버퍼 크기를 조정하며 패키지에 대해 병렬 실행을 구성합니다.To configure the Data Flow task for better performance, you can configure the task's properties, adjust buffer size, and configure the package for parallel execution.

데이터 흐름 태스크의 속성 구성Configure the Properties of the Data Flow Task

참고

이 섹션에 설명된 속성은 패키지의 각 데이터 흐름 태스크에 대해 개별적으로 설정해야 합니다.The properties discussed in this section must be set separately for each Data Flow task in a package.

성능에 영향을 주는 다음 데이터 흐름 태스크 속성을 구성할 수 있습니다.You can configure the following properties of the Data Flow task, all of which affect performance:

  • 버퍼 데이터의 임시 저장소 위치(BufferTempStoragePath 속성)와 BLOB(Binary Large Object) 데이터가 들어 있는 열의 임시 저장소 위치(BLOBTempStoragePath 속성)를 지정합니다.Specify the locations for temporary storage of buffer data (BufferTempStoragePath property) and of columns that contain binary large object (BLOB) data (BLOBTempStoragePath property). 기본적으로 이러한 속성에는 TEMP 및 TMP 환경 변수의 값이 포함됩니다.By default, these properties contain the values of the TEMP and TMP environment variables. 다른 폴더를 지정하여 임시 파일을 다른 하드 디스크 드라이브 또는 보다 빠른 하드 디스크 드라이브에 넣거나 해당 파일을 여러 드라이브로 분산할 수 있습니다.You might want to specify other folders to put the temporary files on a different or faster hard disk drive, or to spread them across multiple drives. 디렉터리 이름을 세미콜론으로 구분하여 여러 디렉터리를 지정할 수 있습니다.You can specify multiple directories by delimiting the directory names with semicolons.

  • DefaultBufferSize 속성을 설정하여 태스크에서 사용되는 버퍼의 기본 크기를 정의하고, DefaultBufferMaxRows 속성을 설정하여 각 버퍼의 최대 행 개수를 정의합니다.Define the default size of the buffer that the task uses, by setting the DefaultBufferSize property, and define the maximum number of rows in each buffer, by setting the DefaultBufferMaxRows property. 버퍼의 기본 크기를 DefaultBufferMaxRows 속성 값에서 자동으로 계산할지 여부를 나타내는 AutoAdjustBufferSize 속성을 설정합니다.Set the AutoAdjustBufferSize property to indicate whether the default size of the buffer is calculated automatically from the value of the DefaultBufferMaxRows property. 기본 버퍼 크기는 10MB이고 최대 버퍼 크기는 2^31-1바이트입니다.The default buffer size is 10 megabytes, with a maximum buffer size of 2^31-1 bytes. 기본 최대 행 개수는 10,000개입니다.The default maximum number of rows is 10,000.

  • EngineThreads 속성을 설정하여 실행 중에 태스크에서 사용할 수 있는 스레드 수를 설정합니다.Set the number of threads that the task can use during execution, by setting the EngineThreads property. 이 속성은 데이터 흐름 엔진에 사용할 스레드 수에 대한 제안 사항을 제공합니다.This property provides a suggestion to the data flow engine about the number of threads to use. 기본값은 10이고 최소값은 3입니다.The default is 10, with a minimum value of 3. 그러나 데이터 흐름 엔진은 이 속성 값에 관계없이 필요한 만큼의 스레드만 사용합니다.However, the engine will not use more threads than it needs, regardless of the value of this property. 동시성 문제를 방지하기 위해 필요한 경우에는 엔진에서 이 속성에 지정된 것보다 많은 수의 스레드를 사용할 수도 있습니다.The engine may also use more threads than specified in this property, if necessary to avoid concurrency issues.

  • 데이터 흐름 태스크가 최적 모드에서 실행되는지 여부(RunInOptimizedMode 속성)를 나타냅니다.Indicate whether the Data Flow task runs in optimized mode (RunInOptimizedMode property). 최적화된 모드는 데이터 흐름에서 사용되지 않은 열, 출력 및 구성 요소를 제거하여 성능을 향상합니다.Optimized mode improves performance by removing unused columns, outputs, and components from the data flow.

    참고

    같은 이름의 속성인 RunInOptimizedMode를 SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT) 의 프로젝트 수준에서 설정하여 데이터 흐름 태스크가 디버깅 중에 최적화된 모드에서 실행되도록 나타낼 수 있습니다.A property with the same name, RunInOptimizedMode, can be set at the project level in SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT) to indicate that the Data Flow task runs in optimized mode during debugging. 이 프로젝트 속성은 디자인 타임에 데이터 흐름 태스크의 RunInOptimizedMode 속성보다 우선합니다.This project property overrides the RunInOptimizedMode property of Data Flow tasks at design time.

버퍼 크기 조정Adjust the Sizing of Buffers

데이터 흐름 엔진은 단일 데이터 행의 예상 크기를 계산하여 버퍼 크기 조정 태스크를 시작합니다.The data flow engine begins the task of sizing its buffers by calculating the estimated size of a single row of data. 그런 다음 예상 행 크기를 DefaultBufferMaxRows 값으로 곱하여 버퍼 크기의 예비 작업 값을 구합니다.Then it multiplies the estimated size of a row by the value of DefaultBufferMaxRows to obtain a preliminary working value for the buffer size.

  • AutoAdjustBufferSize를 true로 설정하면 데이터 흐름 엔진은 계산된 값을 버퍼 크기로 사용하고 DefaultBufferSize의 값은 무시됩니다.If AutoAdjustBufferSize is set to true, the engine data flow engine uses the calculated value as the buffer size, and the value of DefaultBufferSize is ignored.

  • AutoAdjustBufferSize를 false로 설정하면 데이터 흐름 엔진은 버퍼 크기를 결정하기 위해 다음 규칙을 사용합니다.If AutoAdjustBufferSize is set to false, the engine data flow engine uses the following rules to determine the buffer size.

    • 결과가 DefaultBufferSize 값보다 크면 엔진은 행 개수를 줄입니다.If the result is more than the value of DefaultBufferSize, the engine reduces the number of rows.

    • 결과가 내부적으로 계산된 최소 버퍼 크기보다 작으면 엔진은 행 개수를 늘립니다.If the result is less than the internally-calculated minimum buffer size, the engine increases the number of rows.

    • 결과가 최소 버퍼 크기와 DefaultBufferSize 값 사이에 있으면 엔진은 예상 행 크기에 DefaultBufferMaxRows 값을 곱한 값에 가능한 한 근접하게 버퍼 크기를 조정합니다.If the result falls between the minimum buffer size and the value of DefaultBufferSize, the engine sizes the buffer as close as possible to the estimated row size times the value of DefaultBufferMaxRows.

    데이터 흐름 태스크의 성능 테스트를 시작할 때는 DefaultBufferSize 및 DefaultBufferMaxRows의 기본값을 사용합니다.When you begin testing the performance of your data flow tasks, use the default values for DefaultBufferSize and DefaultBufferMaxRows. 데이터 흐름 태스크에 대한 로깅을 설정하고 BufferSizeTuning 이벤트를 선택하여 각 버퍼에 포함된 행 개수를 확인합니다.Enable logging on the data flow task, and select the BufferSizeTuning event to see how many rows are contained in each buffer.

    버퍼의 크기를 조정하기 전에 불필요한 열을 제거하고 데이터 형식을 적절하게 구성하여 각 데이터 행의 크기를 줄이는 방식으로 성능을 향상시켜 보는 것이 좋습니다.Before you begin adjusting the sizing of the buffers, the most important improvement that you can make is to reduce the size of each row of data by removing unneeded columns and by configuring data types appropriately.

    최적의 버퍼 수와 버퍼 크기를 확인하려면 DefaultBufferSize 및 DefaultBufferMaxRows 값으로 시험하면서 BufferSizeTuning 이벤트에서 보고된 정보와 성능을 모니터링합니다.To determine the optimum number of buffers and their size, experiment with the values of DefaultBufferSize and DefaultBufferMaxRows while monitoring performance and the information reported by the BufferSizeTuning event.

    디스크에 대한 페이징이 발생하는 수준까지 버퍼 크기를 늘리지 마십시오.Do not increase buffer size to the point where paging to disk starts to occur. 디스크에 대한 페이징은 최적화되지 않은 버퍼 크기 이상으로 성능을 저하시킵니다.Paging to disk hinders performance more than a buffer size that has not been optimized. 페이징의 발생 여부를 확인하려면 MMC( MicrosoftMicrosoft Management Console)의 성능 스냅인에서 "Buffers spooled" 성능 카운터를 모니터링합니다.To determine whether paging is occurring, monitor the "Buffers spooled" performance counter in the Performance snap-in of the MicrosoftMicrosoft Management Console (MMC).

패키지에 대해 병렬 실행 구성Configure the Package for Parallel Execution

병렬 실행은 실제 프로세서나 논리적 프로세서가 여러 개 있는 컴퓨터에서 성능을 향상시킵니다.Parallel execution improves performance on computers that have multiple physical or logical processors. 패키지에 있는 다른 태스크의 병렬 실행을 지원하기 위해 Integration ServicesIntegration Services 에서는 MaxConcurrentExecutablesEngineThreads라는 두 속성을 사용합니다.To support parallel execution of different tasks in the package, Integration ServicesIntegration Services uses two properties: MaxConcurrentExecutables and EngineThreads.

MaxConcurrentExcecutables 속성The MaxConcurrentExcecutables Property

MaxConcurrentExecutables 속성은 패키지 자체의 속성입니다.The MaxConcurrentExecutables property is a property of the package itself. 이 속성은 동시에 실행할 수 있는 태스크 수를 정의합니다.This property defines how many tasks can run simultaneously. 기본값인 -1은 논리적 프로세서나 실제 프로세서 수에서 2를 더한 수를 의미합니다.The default value is -1, which means the number of physical or logical processors plus 2.

이 속성이 작동하는 방식을 이해하기 위해 세 개의 데이터 흐름 태스크가 있는 샘플 패키지를 살펴 봅니다.To understand how this property works, consider a sample package that has three Data Flow tasks. MaxConcurrentExecutables 를 3으로 설정하면 세 개의 데이터 흐름 태스크가 모두 동시에 실행될 수 있습니다.If you set MaxConcurrentExecutables to 3, all three Data Flow tasks can run simultaneously. 그러나 각 데이터 흐름 태스크에 원본에서 대상으로의 실행 트리가 10개 있다고 가정할 때However, assume that each Data Flow task has 10 source-to-destination execution trees. MaxConcurrentExecutables 를 3으로 설정하면 각 데이터 흐름 태스크 내에서 실행 트리가 병렬로 실행되지 않을 수 있습니다.Setting MaxConcurrentExecutables to 3 does not ensure that the execution trees inside each Data Flow task run in parallel.

EngineThreads 속성The EngineThreads Property

EngineThreads 속성은 각 데이터 흐름 태스크의 속성입니다.The EngineThreads property is a property of each Data Flow task. 이 속성은 데이터 흐름 엔진에서 만들어 병렬로 실행할 수 있는 스레드 수를 정의합니다.This property defines how many threads the data flow engine can create and run in parallel. EngineThreads 속성은 데이터 흐름 엔진에서 원본에 대해 만드는 원본 스레드와 해당 엔진에서 변환 및 대상에 대해 만드는 작업자 스레드 모두에 동일하게 적용됩니다.The EngineThreads property applies equally to both the source threads that the data flow engine creates for sources and the worker threads that the engine creates for transformations and destinations. 따라서 EngineThreads 를 10으로 설정하면 엔진에서 원본 스레드와 작업자 스레드를 각각 10개까지 만들 수 있습니다.Therefore, setting EngineThreads to 10 means that the engine can create up to ten source threads and up to ten worker threads.

이 속성이 작동하는 방식을 이해하기 위해 세 개의 데이터 흐름 태스크가 있는 샘플 패키지를 살펴 봅니다.To understand how this property works, consider the sample package with three Data Flow tasks. 각 데이터 흐름 태스크에 10개의 원본에서 대상으로의 실행 트리가 포함되어 있을 때Each of Data Flow task contains ten source-to-destination execution trees. 각 데이터 흐름 태스크에서 EngineThreads를 10으로 설정하면 30개의 실행 트리가 모두 동시에 실행될 수 있습니다.If you set EngineThreads to 10 on each Data Flow task, all 30 execution trees can potentially run simultaneously.

참고

스레딩에 대한 설명은 이 항목의 범위를 벗어납니다.A discussion of threading is beyond the scope of this topic. 그러나 사용 가능한 프로세서 수보다 많은 스레드를 병렬로 실행하지 않는 것이 일반적인 규칙입니다.However, the general rule is not to run more threads in parallel than the number of available processors. 사용 가능한 프로세서 수보다 많은 스레드를 실행하면 스레드 간 컨텍스트 전환이 빈번하게 발생하므로 성능이 저하될 수 있습니다.Running more threads than the number of available processors can hinder performance because of the frequent context-switching between threads.

개별 데이터 흐름 구성 요소 구성Configuring Individual Data Flow Components

성능 향상을 위해 개별 데이터 흐름 구성 요소를 구성하려면 몇 가지 일반적인 지침을 따라야 합니다.To configure individual data flow components for better performance, there are some general guidelines that you can follow. 데이터 흐름 구성 요소의 각 유형(원본, 변환 및 대상)과 관련된 지침도 있습니다.There are also specific guidelines for each type of data flow component: source, transformation, and destination.

일반적인 지침General Guidelines

데이터 흐름 구성 요소와 상관없이 성능 향상을 위해서는 쿼리를 최적화하고 불필요한 정렬을 사용하지 않는다는 두 가지 일반적인 지침을 따라야 합니다.Regardless of the data flow component, there are two general guidelines that you should follow to improve performance: optimize queries and avoid unnecessary strings.

쿼리 최적화Optimize Queries

많은 데이터 흐름 구성 요소가 원본에서 데이터를 추출할 때나 참조 테이블을 만들기 위해 조회 작업에서 쿼리를 사용합니다.A number of data flow components use queries, either when they extract data from sources, or in lookup operations to create reference tables. 기본 쿼리는 SELECT * FROM <tableName> 구문을 사용합니다.The default query uses the SELECT * FROM <tableName> syntax. 이 유형의 쿼리는 원본 테이블의 모든 열을 반환합니다.This type of query returns all the columns in the source table. 디자인 타임에 모든 열을 사용할 수 있도록 만들면 모든 열을 조회, 통과 또는 원본 열로 선택할 수 있습니다.Having all the columns available at design time makes it possible to choose any column as a lookup, pass-through, or source column. 그러나 사용할 열을 선택한 후에는 선택한 열만 포함되도록 쿼리를 수정해야 합니다.However, after you have selected the columns to be used, you should revise the query to include only those selected columns. 열 수가 적을수록 더 작은 행이 만들어지므로 여분의 열을 제거하면 패키지의 데이터 흐름이 보다 효율적으로 개선됩니다.Removing superfluous columns makes the data flow in a package more efficient because fewer columns create a smaller row. 행이 작을수록 하나의 버퍼에 더 많은 행을 넣을 수 있으며 데이터 집합의 모든 행을 보다 적은 작업으로 처리할 수 있습니다.A smaller row means that more rows can fit into one buffer, and the less work it is to process all the rows in the dataset.

쿼리를 생성하려면 쿼리를 직접 입력하거나 쿼리 작성기를 사용합니다.To construct a query, you can type the query or use Query Builder.

참고

SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT)에서 패키지를 실행하면 SSISSSIS 디자이너의 진행률 탭에 경고가 나열됩니다.When you run a package in SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT), the Progress tab of SSISSSIS Designer lists warnings. 이러한 경고에는 원본에서 데이터 흐름에 제공되지만 나중에 다운스트림 데이터 흐름 구성 요소에 사용되지 않는 데이터 열이 식별되어 포함됩니다.These warnings include identifying any data column that a source makes available to the data flow, but is not subsequently used by downstream data flow components. RunInOptimizedMode 속성을 사용하여 이러한 열을 자동으로 제거할 수 있습니다.You can use the RunInOptimizedMode property to remove these columns automatically.

불필요한 정렬 방지Avoid Unnecessary Sorting

정렬은 근본적으로 느린 작업이므로 불필요한 정렬을 방지하면 패키지 데이터 흐름의 성능을 향상시킬 수 있습니다.Sorting is inherently a slow operation, and avoiding unnecessary sorting can enhance the performance of the package data flow.

원본 데이터가 다운스트림 구성 요소에 의해 사용되기 전에 이미 정렬되어 있는 경우가 있습니다.Sometimes the source data has already been sorted before being used by a downstream component. SELECT 쿼리에 ORDER BY 절이 사용되거나 데이터가 원본에 정렬된 순서대로 삽입되면 이러한 사전 정렬이 발생할 수 있습니다.Such pre-sorting can occur when the SELECT query used an ORDER BY clause or when the data was inserted into the source in sorted order. 이렇게 사전 정렬된 원본 데이터의 경우 데이터가 정렬되어 있음을 나타내는 힌트를 제공하여 특정 다운스트림 변환의 정렬 요구 사항을 만족시키기 위해 정렬 변환을 사용하는 것을 방지할 수 있습니다.For such pre-sorted source data, you can provide a hint that the data is sorted, and thereby avoid the use of a Sort transformation to satisfy the sorting requirements of certain downstream transformations. 예를 들어 병합 및 병합 조인 변환에는 정렬된 입력이 필요합니다. 데이터가 정렬되어 있음을 나타내는 힌트를 제공하려면 다음 태스크를 수행해야 합니다.(For example, the Merge and Merge Join transformations require sorted inputs.) To provide a hint that the data is sorted, you have to do the following tasks:

  • 업스트림 데이터 흐름 구성 요소의 출력에 있는 IsSorted 속성을 True로 설정합니다.Set the IsSorted property on the output of an upstream data flow component to True.

  • 데이터가 정렬되는 정렬 키 열을 지정합니다.Specify the sort key columns on which the data is sorted.

    자세한 내용은 병합 및 병합 조인 변환을 위한 데이터 정렬을 참조하세요.For more information, see Sort Data for the Merge and Merge Join Transformations.

    데이터 흐름에서 데이터를 정렬해야 하는 경우 정렬 연산을 가능한 한 적게 사용하도록 데이터 흐름을 디자인하여 성능을 향상시킬 수 있습니다.If you have to sort the data in the data flow, you can improve performance by designing the data flow to use as few sort operations as possible. 예를 들어 데이터 흐름에서 멀티캐스트 변환을 사용하여 데이터 집합을 복사합니다.For example, the data flow uses a Multicast transformation to copy the dataset. 변환 후 여러 출력을 정렬하는 대신 멀티캐스트 변환을 실행하기 전에 데이터 집합을 한 번 정렬합니다.Sort the dataset once before the Multicast transformation runs, instead of sorting multiple outputs after the transformation.

    자세한 내용은 Sort Transformation, Merge Transformation, Merge Join TransformationMulticast Transformation를 참조하세요.For more information, see Sort Transformation, Merge Transformation, Merge Join Transformation, and Multicast Transformation.

원본Sources

OLE DB 원본OLE DB Source

OLE DB 원본을 사용하여 뷰에서 데이터를 검색할 때는 "SQL 명령"을 데이터 액세스 모드로 선택하고 SELECT 문을 입력합니다.When you use an OLE DB source to retrieve data from a view, select "SQL command" as the data access mode and enter a SELECT statement. SELECT 문을 사용하여 데이터에 액세스하면 "테이블 또는 뷰"를 데이터 액세스 모드로 선택하는 것보다 성능이 향상됩니다.Accessing data by using a SELECT statement performs better than selecting "Table or view" as the data access mode.

변환Transformations

집계, 유사 항목 조회, 유사 항목 그룹화, 조회, 병합 조인 및 느린 변경 차원 변환의 성능을 향상시키려면 이 섹션의 제안 사항을 사용합니다.Use the suggestions in this section to improve the performance of the Aggregate, Fuzzy Lookup, Fuzzy Grouping, Lookup, Merge Join, and Slowly Changing Dimension transformations.

집계 변환Aggregate Transformation

집계 변환에는 Keys, KeysScale, CountDistinctKeysCountDistinctScale 속성이 포함됩니다.The Aggregate transformation includes the Keys, KeysScale, CountDistinctKeys, and CountDistinctScale properties. 이 속성은 변환이 캐시하는 데이터에 필요한 메모리 양을 미리 할당할 수 있도록 하여 성능을 향상시킵니다.These properties improve performance by enabling the transformation to preallocate the amount of memory that the transformation needs for the data that the transformation caches. Group by 연산의 결과로 반환될 그룹의 정확한 수 또는 대략적인 수를 아는 경우 각각 KeysKeysScale 속성을 설정합니다.If you know the exact or approximate number of groups that are expected to result from a Group by operation, set the Keys and KeysScale properties, respectively. 고유 카운트 연산의 결과로 반환될 고유 값의 정확한 수 또는 대략적인 수를 아는 경우 각각 CountDistinctKeysCountDistinctScale 속성을 설정합니다.If you know the exact or approximate number of distinct values that are expected to result from a Distinct count operation, set the CountDistinctKeys and CountDistinctScale properties, respectively.

한 데이터 흐름에 여러 집계를 만들어야 하는 경우 여러 변환을 만드는 대신 하나의 집계 변환을 사용하는 여러 집계를 만드십시오.If you have to create multiple aggregations in a data flow, consider creating multiple aggregations that use one Aggregate transformation instead of creating multiple transformations. 이 방법을 사용하면 한 집계가 다른 집계의 하위 집합인 경우 성능이 향상됩니다. 이는 변환이 한 번만 들어오는 데이터를 검색하고 내부 저장소를 최적화할 수 있기 때문입니다.This approach improves performance when one aggregation is a subset of another aggregation because the transformation can optimize internal storage and scan incoming data only once. 예를 들어 집계에서 GROUP BY 절 및 AVG 집계를 사용하는 경우 이를 하나의 변환으로 조합하면 성능을 향상시킬 수 있습니다.For example, if an aggregation uses a GROUP BY clause and an AVG aggregation, combining them into one transformation can improve performance. 그러나 하나의 집계 변환 내에서 여러 집계를 수행하면 집계 작업이 직렬화되므로 여러 집계가 독립적으로 계산되어야 하는 경우 성능이 향상되지 않을 수 있습니다.However, performing multiple aggregations within one Aggregate transformation serializes the aggregation operations, and therefore might not improve performance when multiple aggregations must be computed independently.

유사 항목 조회 및 유사 항목 그룹화 변환Fuzzy Lookup and Fuzzy Grouping Transformations

유사 항목 조회 및 유사 항목 그룹화 변환의 성능 최적화에 대한 자세한 내용은 백서 SQL Server 2005 데이터 변환 서비스의 퍼지 조회 및 퍼지 그룹화를 참조하십시오.For information about optimizing the performance of the Fuzzy Lookup and Fuzzy Grouping transformations, see the white paper, Fuzzy Lookup and Fuzzy Grouping in SQL Server Integration Services 2005.

조회 변환Lookup Transformation

필요한 열만 조회하는 SELECT 문을 입력하여 메모리에서 참조 데이터의 크기를 최소화합니다.Minimize the size of the reference data in memory by entering a SELECT statement that looks up only the columns that you need. 이 옵션은 불필요한 데이터를 대량 반환하는 전체 테이블 또는 뷰 선택 작업보다 성능을 향상시킵니다.This option performs better than selecting an entire table or view, which returns a large amount of unnecessary data.

Merge Join TransformationMerge Join Transformation

병합 조인 변환에서 과도한 메모리를 사용할 위험을 줄이기 위해 Microsoft에서 필요한 변경을 수행했기 때문에 더 이상 MaxBuffersPerInput 속성 값을 구성할 필요가 없습니다.You no longer have to configure the value of the MaxBuffersPerInput property because Microsoft has made changes that reduce the risk that the Merge Join transformation will consume excessive memory. 과도한 메모리가 사용되는 문제는 여러 병합 조인 입력에서 균일하지 않은 속도로 데이터를 생성하는 경우에 발생합니다.This problem sometimes occurred when the multiple inputs of the Merge Join produced data at uneven rates.

느린 변경 차원 변환Slowly Changing Dimension Transformation

느린 변경 차원 마법사 및 느린 변경 차원 변형은 사용자 대부분의 요구를 충족하는 일반적인 용도의 도구입니다.The Slowly Changing Dimension Wizard and the Slowly Changing Dimension transformation are general-purpose tools that meet the needs of most users. 그러나 마법사에서 생성하는 데이터 흐름은 성능을 위해 최적화되지 않습니다.However, the data flow that the wizard generates is not optimized for performance.

일반적으로 느린 변경 차원 변환에서 가장 느린 구성 요소는 한 번에 하나의 행에 대해 UPDATE를 수행하는 OLE DB 명령 변환입니다.Typically, the slowest components in the Slowly Changing Dimension transformation are the OLE DB Command transformations that perform UPDATEs against a single row at a time. 따라서 느린 변경 차원 변환의 성능을 향상시키는 가장 효과적인 방법은 OLE DB 명령 변환을 바꾸는 것입니다.Therefore, the most effective way to improve the performance of the Slowly Changing Dimension transformation is to replace the OLE DB Command transformations. 업데이트할 모든 행을 준비 테이블에 저장하는 대상 구성 요소로 이러한 변환을 바꿀 수 있습니다.You can replace these transformations with destination components that save all rows to be updated to a staging table. 그런 다음 모든 행에 대해 동시에 단일 집합 기반 Transact-SQL UPDATE를 수행하는 SQL 실행 태스크를 추가할 수 있습니다.Then, you can add an Execute SQL task that performs a single set-based Transact-SQL UPDATE against all rows at the same time.

고급 사용자는 느린 변경 차원 처리를 위해 대규모 차원에 대해 최적화된 사용자 지정 데이터 흐름을 디자인할 수 있습니다.Advanced users can design a custom data flow for slowly changing dimension processing that is optimized for large dimensions. 이 방법에 대한 설명 및 예는 백서 Project REAL: 비즈니스 인텔리전스 ETL 디자인 방법의 "고유 차원 시나리오" 섹션을 참조하십시오.For a discussion and example of this approach, see the section, "Unique dimension scenario," in the white paper, Project REAL: Business Intelligence ETL Design Practices.

대상Destinations

대상에서 성능을 향상시키려면 SQL ServerSQL Server 대상을 사용하고 대상의 성능을 테스트하십시오.To achieve better performance with destinations, consider using a SQL ServerSQL Server destination and testing the destination's performance.

SQL Server 대상SQL Server Destination

패키지가 같은 컴퓨터에 있는 SQL ServerSQL Server 인스턴스에 데이터를 로드하면 SQL ServerSQL Server 대상을 사용합니다.When a package loads data to an instance of SQL ServerSQL Server on the same computer, use a SQL ServerSQL Server destination. 이 대상은 고속 대량 로드를 위해 최적화되어 있습니다.This destination is optimized for high-speed bulk loads.

대상 성능 테스트Testing the Performance of Destinations

대상에 데이터를 저장하는 데는 예상보다 많은 시간이 소모됩니다.You may find that saving data to destinations takes more time than expected. 대상의 낮은 데이터 처리 능력으로 인해 속도 저하가 일어났는지 여부를 식별하려면 임시로 대상을 행 개수 변환으로 대체하십시오.To identify whether the slowness is caused by the inability of the destination to process data quickly enough, you can temporarily replace the destination with a Row Count transformation. 처리량이 크게 향상되면 데이터를 로드하는 대상에서 속도 저하가 일어난 것입니다.If the throughput improves significantly, it is likely that the destination that is loading the data is causing the slowdown.

진행률 탭의 정보 검토Review the Information on the Progress Tab

SSISSSIS 디자이너는 SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT)에서 패키지를 실행할 때 제어 흐름과 데이터 흐름 모두에 대한 정보를 제공합니다. Designer provides information about both control flow and data flow when you run a package in SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT). 진행률 탭에는 태스크와 컨테이너가 실행 순서대로 나열되며 패키지 자체를 포함하여 각 태스크 및 컨테이너에 대한 시작 및 종료 시간, 경고 및 오류 메시지가 표시됩니다.The Progress tab lists tasks and containers in order of execution and includes start and finish times, warnings, and error messages for each task and container, including the package itself. 또한 데이터 흐름 구성 요소가 실행 순서대로 표시되고, 진행률(완료율로 표시)과 처리된 행 개수에 대한 정보가 포함됩니다.It also lists data flow components in order of execution and includes information about progress, displayed as percentage complete, and the number of rows processed.

진행률 탭에 메시지를 표시할지 여부는 SSIS 메뉴의 디버그 진행률 보고 옵션을 선택 또는 선택 취소하여 설정합니다.To enable or disable the display of messages on the Progress tab, toggle the Debug Progress Reporting option on the SSIS menu. 진행률 보고를 사용하지 않으면 SQL Server Data ToolsSQL Server Data Tools에서 복잡한 패키지를 실행하는 동안 성능을 높일 수 있습니다.Disabling progress reporting can help improve performance while running a complex package in SQL Server Data ToolsSQL Server Data Tools.

기사와 블로그 게시물Articles and Blog Posts

관련 항목:See Also

패키지 배포 문제 해결 도구 Troubleshooting Tools for Package Development
패키지 실행 문제 해결 도구Troubleshooting Tools for Package Execution