병렬 처리를 위한 SSIS 패키지 디자인(SQL Server 비디오)

적용 대상: Microsoft SQL Server Integration Services

작성자: 매트 캐롤, Microsoft Corporation

길이: 00:12:37

크기: 29.2MB

형식: WMV 파일

이 비디오 보기

관련 도움말 항목:

식별자 열 만들기 및 수정

파티션 전환을 사용하여 데이터를 효율적으로 전송

관련 아티클 및 블로그 게시물:

SQL Server Integration Services에 대한 상위 10개 최선의 방법

ETL 성과

추가 비디오:

엔터프라이즈의 SSIS 패키지 성능 측정 및 이해(SQL Server 비디오)

엔터프라이즈의 SSIS 패키지 데이터 흐름 튜닝(SQL Server 비디오)

SSIS 데이터 흐름 버퍼 이해(SQL Server 비디오)

비디오 요약

이 비디오에서는 병렬 처리를 위한 디자인을 통해 Integration Services 패키지의 성능을 향상시키는 방법을 보여 줍니다.

비디오 사사

SSIS: 성능 디자인 및 튜닝 SQL Server 비디오 시리즈 자료를 작성해 준 토마스 케저에게 감사를 표합니다. 이 비디오는 시리즈의 네 번째 편입니다.

또한 지침과 소중한 의견을 제공해 준 칼라 사보타와 더글라스 라우덴쉬라거에게 감사를 전합니다.

비디오 기술 참고 사항

[!참고] 기술 참고 사항은 비디오에서 일부 발췌한 것입니다.

다음은 병렬 처리 디자인 방법인 문제 분할, 충돌 제거 및 효율적인 일정 예약에 대한 설명입니다.

병렬 처리 디자인의 개념은 대규모 문제를 보다 작은 독립적인 부분으로 나누어 작업을 분산하는 것입니다. Integration Services에서 문제를 보다 작은 부분으로 나눈다는 것은 처리할 데이터를 분할한다는 의미입니다. 이때 동일한 크기로 분할해야 보다 쉽게 최적의 일정 예약과 배포를 수행할 수 있습니다.

다음으로, 작업의 보다 작은 부분 간에 충돌을 제거해야 서로 방해하지 않고 병렬로 작업이 이루어질 수 있습니다. 각 작업 단위가 자체 포함되어 있어서 외부와의 조정이 필요 없는 상태 비저장 디자인을 사용하는 것이 좋습니다. 그리고, 외부 리소스에 대한 경합을 줄여야 합니다.

마지막으로, 독립적인 작업의 작은 부분을 분산시켜야 보다 빠르게 작업이 수행될 수 있습니다. 즉, 가장 중요한 리소스가 효율적으로 사용되도록 작업 일정을 예약하고 작업을 배포해야 한다는 의미로, 시간을 효율적으로 사용하고 시간이 오래 걸리는 작업이 런타임을 지배하지 않도록 해야 합니다. Gantt(간트) 차트 작업을 수행한다고 가정할 경우 전체 작업이 최대한 일찍 끝날 수 있도록 작업을 균형 있게 분산해야 합니다.

문제 분할

원본 데이터를 동일한 크기의 보다 작은 청크로 분할해야 합니다. 시간 또는 배치와 같은 데이터의 자연적 범위에 따라 분할을 수행할 수 있습니다. 또는 ID 열이 있는 경우 동일한 파티션을 식별하도록 값을 모듈로로 표시할 수 있습니다. 아니면 주요 열에 해시 함수를 적용하여 파티션을 생성할 수도 있습니다.

원본 테이블을 분할하는 것 외에 원본 데이터의 분할과 일치하도록 대상 테이블을 분할해야 합니다. SQL SWITCH 명령을 사용하면 테이블에 파티션을 추가하고 제거할 수 있는 매우 효율적인 메커니즘을 제공합니다.

충돌 제거

문제를 분할한 후에는 파티션 간의 잠재적 충돌을 제거해야 합니다. 복잡한 상호 작용과 그로 인한 충돌을 방지하려면 상태 비저장 디자인을 사용하는 것이 중요하며, 패키지를 상태 비저장으로 디자인하려면 작업에 필요한 모든 정보를 전달해야 합니다.

잠금 경합을 피해야 합니다. 많은 연결이 동일한 테이블에 삽입되면 경합이 발생하게 됩니다. 경합을 방지하려면 분할된 테이블과 SQL SWITCH를 사용합니다.

제어 하드웨어 경합에 주의해야 합니다. 디스크 입출력 문제라면 보다 빠른 드라이브로 이동합니다. 네트워크 입출력 문제라면 네트워크 컨트롤러를 추가하거나 업그레이드합니다. CPU 또는 메모리 사용량 문제라면 보다 많은 프로세서 또는 메모리를 탑재한 컴퓨터에서 실행하거나 여러 컴퓨터에 걸쳐 실행해 봅니다. Integration Services는 메모리로 실행된다는 점을 명심하고 각 패키지에 메모리가 충분한지 확인해야 합니다.

효율적인 일정 예약

보다 작은 태스크로 분할하고 태스크 간의 충돌을 제거한 후에 태스크가 효율적으로 실행되도록 일정을 예약해야 합니다. 효율적인 일정을 만들려면 먼저 수행할 작업의 우선 순위 큐를 정의합니다. 이때 SQL 테이블을 사용하는 것이 좋습니다.

그런 다음 작업을 수행하기 위해 작성한 패키지의 복사본을 여러 개 만듭니다. Windows START 명령을 사용하여 dtexec.exe를 호출하면 간단하고 효과적으로 복사본을 만들 수 있습니다. 처음에 만드는 패키지 수에 따라 사용할 병렬 처리 수준이 결정됩니다.

그런 다음 이러한 각 패키지는 큐에 작업이 남지 않을 때까지 우선 순위에 따라 태스크 큐에서 작업을 처리합니다. 패키지 내부의 루프는 먼저 우선 순위 큐에서 태스크를 가져온 다음 해당 태스크에 정의된 작업을 수행하고 태스크 큐가 빌 때까지 계속해서 반복합니다.

데모

첫 번째 데모 실행에서는 각 태스크가 단일 패키지 인스턴스별로 순서대로 처리됩니다.

두 번째 데모 실행에서는 두 개의 프로세스가 병렬로 처리됩니다. 태스크는 두 개의 일괄 처리 작업으로 완료되고 총 데모 실행 시간은 약 64초에서 36초로 감소합니다.

세 번째 데모 실행에서는 네 개의 프로세스가 병렬로 처리됩니다. 개별 태스크 시간이 약 9초에서 14초로 증가되었고, 총 실행 시간은 약 36초에서 28초로 감소되었습니다.

마지막 데모 실행에서는 여덟 개의 프로세스가 병렬로 처리됩니다. 모든 태스크가 동시에 수행되기 때문에 각 태스크 시간이 약 27초로 증가되었고 총 실행 시간은 네 개의 프로세스 처리 때와 거의 같습니다. 여기서는 여덟 개의 모든 프로세스가 디스크에서 데이터 파일을 읽기 위해 서로 경합했기 때문에 디스크 입출력 병목 현상이 발생했습니다. 이 문제를 해결하려면 파일을 별도의 디스크와 컨트롤러에 분산시키고 보다 빠른 디스크 기술로 전환해야 합니다.

참고 항목

관련 자료

SQLCAT 팀

도움말 및 정보

SQL Server 2008 지원 받기