SQL Server 에이전트를 사용하여 원격 서버의 패키지 로드 균형 조정Load-Balancing Packages on Remote Servers by Using SQL Server Agent

패키지를 여러 개 실행해야 하는 경우 사용 가능한 다른 서버를 사용하는 것이 편리합니다.When many packages have to be run, it is convenient to use other servers that are available. 모든 패키지를 한 부모 패키지에서 관리하고 다른 서버를 사용하여 패키지를 실행하는 이 방법을 로드 균형 조정이라고 합니다.This method of using other servers to run packages when the packages are all under the control of one parent package is called load balancing. SQL ServerSQL Server Integration ServicesIntegration Services에서 로드 균형 조정은 패키지 소유자가 직접 설계해야 하며In SQL ServerSQL Server Integration ServicesIntegration Services, load balancing is a manual procedure that must be architected by the owners of the packages. 서버에서 자동으로 수행되지 않습니다.Load balancing is not performed automatically by the servers. 또한 원격 서버에서 실행되는 패키지는 다른 패키지의 개별 태스크가 아닌 전체 패키지여야 합니다.Also, the packages that are run on the remote servers must be whole packages, not individual tasks in other packages.

로드 균형 조정은 다음 시나리오에서 유용합니다.Load balancing is useful in the following scenarios:

  • 패키지를 동시에 실행할 수 있습니다.Packages can run at the same time.

  • 패키지가 크고 순차적으로 실행할 경우 처리에 허용된 시간보다 오래 걸릴 수 있습니다.Packages are large and, if run sequentially, can run longer than the time allowed for processing.

    관리자와 설계자가 처리에 추가 서버를 사용하는 것이 프로세스에 유리한지 여부를 결정할 수 있습니다.Administrators and architects can determine whether using additional servers for processing would benefit their processes.

로드 균형 조정의 그림Illustration of Load-Balancing

다음 다이어그램에서는 서버의 부모 패키지를 보여 줍니다.The following diagram shows a parent package on a server. 부모 패키지에는 여러 개의 SQL 작업 에이전트 실행 태스크가 들어 있습니다.The parent package contains multiple Execute SQL Job Agent tasks. 부모 패키지에 있는 각 태스크는 원격 서버의 SQL Server 에이전트를 호출합니다.Each task in the parent package calls a SQL Server Agent on a remote server. 이러한 원격 서버에는 해당 서버의 패키지를 호출하는 단계가 포함된 SQL Server 에이전트 작업이 들어 있습니다.Those remote servers contain SQL Server Agent jobs that include a step that calls a package on that server.

SSIS 로드 균형 아키텍처 개요Overview of SSIS load balancing architecture

이 아키텍처에서 로드 균형을 조정하는 데 필요한 단계는 새로운 개념이 아닙니다.The steps required for load balancing in this architecture are not new concepts. 대신 기존 개념 및 일반 SSIS 개체를 새로운 방식으로 사용하여 로드 균형을 조정합니다.Instead, load balancing is achieved by using existing concepts and common SSIS objects in a new way.

SQL Server 에이전트를 사용하여 원격 인스턴스에서 패키지 실행Execution of Packages on a Remote Instance by using SQL Server Agent

원격 패키지 실행을 위한 기본 아키텍처에서 중앙 패키지는 다른 원격 패키지를 제어하는 SQL Server의 인스턴스에 있습니다.In the basic architecture for remote package execution, a central package resides on the instance of SQL Server that controls the other remote packages. 다이어그램은 이 중앙 패키지, 즉 SSIS 부모를 보여 줍니다.The diagram shows this central package, named the SSIS Parent. 이 부모 패키지가 있는 인스턴스는 자식 패키지를 실행하는 SQL Server 에이전트 작업의 실행을 제어합니다.The instance where this parent package resides controls execution of the SQL Server Agent jobs that run the child packages. 자식 패키지는 원격 서버에서 SQL Server 에이전트가 제어하는 고정 일정에 따라 실행되지 않습니다.The child packages are not run according to a fixed schedule controlled by the SQL Server Agent on the remote server. 대신 자식 패키지는 부모 패키지가 호출하면 SQL Server 에이전트에 의해 시작되고 SQL Server 에이전트가 있는 SQL Server 인스턴스와 같은 인스턴스에서 실행됩니다.Instead, the child packages are started by the SQL Server Agent when called by the parent package and are run on the same instance of SQL Server on which the SQL Server Agent resides.

SQL Server 에이전트를 사용하여 원격 패키지를 실행하려면 부모 및 자식 패키지를 구성하고 자식 패키지를 제어하는 SQL Server 에이전트 작업을 설정해야 합니다.Before you can run a remote package by using SQL Server Agent, you must configure the parent and child packages and set up the SQL Server Agent jobs that control the child packages. 다음 섹션에서는 원격 서버에서 실행되는 패키지를 만들고, 구성하고, 실행하고, 유지 관리하는 방법을 설명합니다.The following sections provide more information about how to create, configure, run, and maintain packages that run on remote servers. 이 프로세스에는 여러 단계가 있습니다.There are several steps to this process:

  • 원격 서버에서 자식 패키지 만들기 및 설치Creating the child packages and installing them on remote servers.

  • 패키지를 실행할 원격 인스턴스에 SQL Server 에이전트 작업 만들기Creating the SQL Server Agent jobs on the remote instances that will run the packages.

  • 부모 패키지 만들기Creating the parent package.

  • 자식 패키지에 대한 로깅 시나리오 결정Determine the logging scenario for the child packages.

자식 패키지 구현Implementation of Child Packages

Integration ServicesIntegration Services를 사용하여 로그 균형 조정을 구현하면 사용 가능한 CPU 또는 서버 시간을 사용할 다른 서버에 자식 패키지가 설치됩니다.When you implement load balancing using Integration ServicesIntegration Services, child packages are installed on other servers to take advantage of the available CPU or server time. 자식 패키지를 만들고 실행하려면 다음 단계를 수행하십시오.To create and run the child packages requires the following steps:

  • 자식 패키지 디자인Designing the child packages.

  • 원격 서버로 패키지 이동Moving the packages to the remote server.

  • 자식 패키지를 실행하는 단계가 포함된 원격 서버에 SQL Server 에이전트 작업 만들기Creating a SQL Server Agent Job on the remote server that contains a step that runs the child package.

  • SQL Server 에이전트 작업 및 자식 패키지 테스트와 디버깅Testing and debugging the SQL Server Agent Job and child packages.

    자식 패키지를 디자인하는 경우 패키지를 디자인하는 데 제한이 없으므로 원하는 모든 기능을 제공할 수 있습니다.When you design the child packages, the packages have no limitations in their design, and you can put in any functionality you desire. 그러나 패키지에서 데이터에 액세스하는 경우 해당 데이터에 액세스할 권한이 패키지를 실행하는 서버에 있어야 합니다.However, if the package accesses data, you must ensure that the server that runs the package has access to the data.

    자식 패키지를 실행하는 부모 패키지를 확인하려면 SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT) 의 솔루션 탐색기에서 패키지를 마우스 오른쪽 단추로 클릭한 다음 진입점 패키지를 클릭합니다.To identify the parent package that executes child packages, in SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT) right click the package in Solution Explorer and then click Entry-point Package.

    자식 패키지가 디자인되면 원격 서버에 해당 패키지를 배포합니다.After the child packages have been designed, the next step is to deploy them on the remote servers.

원격 인스턴스로 자식 패키지 이동Moving the Child Package to the Remote Instance

여러 가지 방법으로 패키지를 다른 서버로 이동할 수 있는데There are multiple ways to move packages to other servers. 그 중 다음 두 가지 방법이 권장됩니다.The two suggested methods are:

  • SQL Server Management StudioSQL Server Management Studio를 사용하여 패키지를 내보냅니다.Exporting packages by using SQL Server Management StudioSQL Server Management Studio.

  • 배포할 패키지를 포함하는 프로젝트의 배포 유틸리티를 작성한 다음 패키지를 파일 시스템 또는 SQL ServerSQL Server인스턴스에 설치하기 위해 패키지 설치 마법사를 실행하여 패키지를 배포합니다.Deploying packages by building a deployment utility for the project that contains the packages you want to deploy, and then running the Package Installation Wizard to install the packages to the file system or to an instance of SQL ServerSQL Server. 자세한 내용은 레거시 패키지 배포(SSIS)를 참조하세요.For more information, see Legacy Package Deployment (SSIS).

    사용할 원격 서버마다 배포를 반복하여 수행해야 합니다.You must repeat the deployment to each remote server you want to use.

SQL Server 에이전트 작업 만들기Creating the SQL Server Agent Jobs

자식 패키지가 여러 서버에 배포되면 자식 패키지가 포함된 서버마다 SQL Server 에이전트 작업을 만듭니다.After the child packages have been deployed to the various servers, create a SQL Server Agent job on each server that contains a child package. SQL Server 에이전트 작업에는 작업 에이전트 호출 시 자식 패키지를 실행하는 단계가 포함됩니다.The SQL Server Agent job contains a step that runs the child package when the job agent is called. SQL Server 에이전트 작업은 예약된 작업이 아니며 부모 패키지에서 호출 시에만 자식 패키지를 실행합니다.The SQL Server Agent jobs are not scheduled jobs; they run the child packages only when they are called by the parent package. 부모 패키지로 다시 전달되는 작업 성공 또는 실패 알림은 자식 패키지의 성공 또는 실패나 실행 여부가 아니라 SQL Server 에이전트 작업의 성공 또는 실패와 호출 성공 여부를 반영합니다.Notification of success or failure of the job back to the parent package reflects the success or failure of the SQL Server Agent job and whether it was called successfully, not the success or failure of the child package or whether it was executed.

SQL Server 에이전트 작업 및 자식 패키지 디버깅Debugging the SQL Server Agent Jobs and Child Packages

다음 방법 중 하나를 사용하여 SQL Server 에이전트 작업 및 해당 자식 패키지를 테스트할 수 있습니다.You can test the SQL Server Agent jobs and their child packages by using one of the following methods:

  • 디버그 / 디버깅하지 않고 시작을 클릭하여 SSIS 디자이너에서 각 자식 패키지를 실행합니다.Running each child package in SSIS Designer, by clicking Debug / Start Without Debugging.

  • SQL Server Management StudioSQL Server Management Studio를 사용하여 원격 컴퓨터에서 개별 SQL Server 에이전트 작업을 실행하여 패키지가 실행되는지 확인합니다.Running the individual SQL Server Agent job on the remote computer by using SQL Server Management StudioSQL Server Management Studio, to make sure that the package runs.

    SQL ServerSQL Server 에이전트 작업에서 실행한 패키지의 문제를 해결하는 방법은 지원 기술 자료에서 SQL Server 에이전트 작업 단계에서 SSIS 패키지를 호출할 때 SSIS 패키지가 실행하지 않는다 MicrosoftMicrosoft 를 참조하십시오.For information about how to troubleshoot packages that you run from SQL ServerSQL Server Agent jobs, see An SSIS package does not run when you call the SSIS package from a SQL Server Agent job step in the MicrosoftMicrosoft Support Knowledge Base.

    SQL Server 에이전트는 프록시에 대한 하위 시스템 액세스 권한을 확인하고 작업 단계가 실행될 때마다 프록시에 대한 액세스 권한을 부여합니다.The SQL Server Agent checks subsystem access for a proxy and gives access to the proxy every time the job step runs.

    SQL Server Management StudioSQL Server Management Studio에서 프록시를 만들 수 있습니다.You can create a proxy in SQL Server Management StudioSQL Server Management Studio.

부모 패키지 구현Implementation of the Parent Package

여러 서버에서 SSIS 패키지의 로드 균형을 조정할 때 자식 패키지를 만들어 배포하고 이러한 패키지를 실행하기 위한 원격 SQL Server 에이전트 작업을 만든 다음에는 부모 패키지를 만들어야 합니다.When load balancing SSIS packages across various servers, the next step after the child packages have been created, deployed, and remote SQL Server Agent Jobs created to run them, is to create the parent package. 부모 패키지에는 많은 SQL Server 에이전트 작업 실행 태스크가 포함되며 각 태스크는 자식 패키지 중 하나를 실행하는 서로 다른 SQL Server 에이전트 작업을 호출합니다.The parent package will contain many Execute SQL Server Agent Job tasks, each task responsible for calling a different SQL Server Agent job that runs one of the child packages. 그러면 부모 패키지의 SQL Server 에이전트 작업 실행 태스크가 다양한 SQL Server 에이전트 작업을 실행합니다.The Execute SQL Server Agent Job tasks in the parent package in turn run the various SQL Server Agent jobs. 부모 패키지의 각 태스크에는 원격 서버 연결 방법 및 해당 서버에서 실행할 작업과 같은 정보가 포함되어 있습니다.Each task in the parent package contains information such as how to connect to the remote server and what job to run on that server. 자세한 내용은 Execute SQL Server Agent Job Task을 참조하세요.For more information, see Execute SQL Server Agent Job Task.

자식 패키지를 실행하는 부모 패키지를 확인하려면 SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT) 의 솔루션 탐색기에서 패키지를 마우스 오른쪽 단추로 클릭한 다음 진입점 패키지를 클릭합니다.To identify the parent package that executes child packages, in SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT) right click the package in Solution Explorer and then click Entry-point Package.

하위 패키지 나열Listing Child Packages

Integration ServicesIntegration Services 서버에 상위 패키지와 하위 패키지가 들어 있는 프로젝트를 배포하는 경우, 상위 패키지에서 실행되는 하위 패키지 목록을 볼 수 있습니다.If you deploy your project that contains a parent package and child package(s) to the Integration ServicesIntegration Services server, you can view a list of the child packages that are executed by the parent package. 상위 패키지를 실행할 때 상위 패키지의 개요 보고서가 SQL Server Management StudioSQL Server Management Studio에 자동으로 생성됩니다.When you run the parent package, an Overview report for the parent package is automatically generated in SQL Server Management StudioSQL Server Management Studio. 이 보고서에는 다음 이미지처럼 상위 패키지에 포함되는 패키지 실행 태스크에 의해 수행된 하위 패키지가 나열됩니다.The report lists the child packages that were executed by the Execute Package task contained in the parent package, as shown in the following image.

하위 패키지 목록이 있는 개요 보고서Overview Report with list of child packages

개요 보고서에 액세스하는 방법은 Reports for the Integration Services Server를 참조하세요.For information about accessing the Overview report, see Reports for the Integration Services Server.

부모 패키지의 선행 제약 조건Precedence Constraints in the Parent Package

부모 패키지의 여러 SQL Server 에이전트 작업 실행 태스크 간에 선행 제약 조건을 만들면 이러한 선행 제약 조건은 원격 서버의 SQL Server 에이전트 작업이 시작되는 시간만 제어합니다.When you create precedence constraints between the Execute SQL Server Agent Job tasks in the parent package, these precedence constraints control only the time that the SQL Server Agent jobs on the remote servers are started. 선행 제약 조건은 SQL Server 에이전트 작업 단계에서 실행된 자식 패키지의 성공 또는 실패 여부 정보를 받을 수 없습니다.Precedence constraints cannot receive information regarding the success or failure of the child packages that are run from the steps of the SQL Server Agent jobs.

즉, 부모 패키지의 SQL Server 에이전트 작업 실행이 가지는 유일한 기능은 SQL Server 에이전트 작업이 자식 패키지를 실행하도록 요청하는 것이므로 자식 패키지의 성공 또는 실패 상태가 부모에게 전파되지 않습니다.This means that success or failure of a child package does not propagate to the parent, because the sole function of the Execute SQL Server Agent job in the parent package is to request the SQL Server Agent job to run the child package. SQL Server 에이전트 작업이 성공적으로 호출되면 부모 패키지는 Success의 결과를 받습니다.After the SQL Server Agent job is called successfully, the parent package receives a result of Success.

이 시나리오에서 실패는 원격 SQL Server 에이전트 작업 태스크 호출에만 실패했음을 의미합니다.Failure in this scenario means only that there has been a failure in calling the remote SQL Server Agent Job task. 원격 서버가 다운되어 에이전트가 응답하지 않는 경우에 이러한 상황이 발생할 수 있습니다.One situation where this can occur is when the remote server is down and the agent does not respond. 부모 패키지는 에이전트가 시작된 이상 태스크를 완료합니다.However, as long as the agent fires, the parent package has successfully completed its task.

참고

Transact-SQL 문인 sp_start_job N'package_name'을 포함하는 SQL 실행 태스크를 사용할 수 있습니다.You can use an Execute SQL Task that contains a Transact-SQL statement of sp_start_job N'package_name'. 자세한 내용은 sp_start_job(Transact-SQL)을 참조하세요.For more information, see sp_start_job (Transact-SQL).

디버깅 환경Debugging Environment

부모 패키지를 테스트할 때는 디버그/디버깅 시작(F5)을 사용하여 디자이너의 디버깅 환경을 실행한 다음 사용합니다.When testing the parent package, use the debugging environment of the designer by running it using Debug / Start Debugging (F5). 또는 명령 프롬프트 유틸리티인 dtexec를 사용할 수 있습니다.Alternatively, you can use the command prompt utility, dtexec. 자세한 내용은 dtexec Utility을 참조하세요.For more information, see dtexec Utility.

원격 서버의 로드 균형 조정된 패키지 로깅Logging for Load Balanced Packages on Remote Servers

모든 자식 패키지가 동일한 로그 공급자를 사용하고 동일한 대상에 쓰는 경우 관리자가 보다 쉽게 여러 서버에서 실행되는 모든 자식 패키지에 대한 로그를 관리할 수 있습니다.It is easier for an administrator to manage the logs for all the child packages that are running on various servers when all the child packages use the same log provider and they all write to the same destination. 모든 자식 패키지에 공통된 로그 파일을 만드는 한 가지 방법은 SQL Server 로그 공급자에 이벤트를 기록하도록 자식 패키지를 구성하는 것입니다.One way that you can create a common log file for all child packages is to configure the child packages to log their events to a SQL Server log provider. 모든 패키지가 동일한 데이터베이스, 동일한 서버 및 서버의 동일한 인스턴스를 사용하도록 구성할 수 있습니다.You can configure all the packages to use the same database, the same server, and the same instance of the server.

관리자는 단일 서버에 로그온하여 모든 자식 패키지에 대한 로그 파일을 볼 수 있습니다.To view the log files, the administrator only has to log on to a single server to view the log files for all child packages.

패키지에서 로깅을 활성화 하는 방법에 대 한 정보를 참조 하십시오. Integration Services (SSIS) 로깅합니다.For information about how to enable logging in a package, see Integration Services (SSIS) Logging.

패키지에 대한 SQL Server 에이전트 작업SQL Server Agent Jobs for Packages