Bilanciamento del carico dei pacchetti su server remoti tramite SQL Server AgentLoad-Balancing Packages on Remote Servers by Using SQL Server Agent

Quando è necessario eseguire numerosi pacchetti, è preferibile utilizzare altri server eventualmente disponibili.When many packages have to be run, it is convenient to use other servers that are available. L'utilizzo di altri server per l'esecuzione di più pacchetti controllati da un unico pacchetto padre è detto bilanciamento del carico.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. In SQL ServerSQL Server Integration ServicesIntegration Servicesil bilanciamento del carico è una procedura manuale che deve essere definita dai proprietari dei pacchetti.In SQL ServerSQL Server Integration ServicesIntegration Services, load balancing is a manual procedure that must be architected by the owners of the packages. Il bilanciamento del carico non viene infatti eseguito automaticamente dai server.Load balancing is not performed automatically by the servers. Inoltre, sui server remoti è possibile eseguire esclusivamente pacchetti interi, non singole attività in altri pacchetti.Also, the packages that are run on the remote servers must be whole packages, not individual tasks in other packages.

Il bilanciamento del carico risulta utile negli scenari seguenti:Load balancing is useful in the following scenarios:

  • I pacchetti possono essere eseguiti contemporaneamente.Packages can run at the same time.

  • I pacchetti sono di grandi dimensioni e, se eseguiti sequenzialmente, richiedere un tempo di esecuzione superiore al tempo massimo consentito per l'elaborazione.Packages are large and, if run sequentially, can run longer than the time allowed for processing.

    Amministratori e architetti possono stabilire se l'utilizzo di server aggiuntivi per l'elaborazione può costituire un vantaggio per i processi.Administrators and architects can determine whether using additional servers for processing would benefit their processes.

Illustrazione del bilanciamento del caricoIllustration of Load-Balancing

Nella figura seguente viene illustrato un pacchetto padre in un server.The following diagram shows a parent package on a server. Il pacchetto padre contiene più attività Esegui processo di SQL Server AgentThe parent package contains multiple Execute SQL Job Agent tasks. e ogni attività nel pacchetto padre chiama un processo di SQL Server Agent su un server remoto.Each task in the parent package calls a SQL Server Agent on a remote server. Ogni server remoto contiene un processo di SQL Server Agent che include un passaggio in cui viene chiamato un pacchetto su tale server.Those remote servers contain SQL Server Agent jobs that include a step that calls a package on that server.

Panoramica dell'architettura di bilanciamento del carico SSISOverview of SSIS load balancing architecture

I passaggi necessari per il bilanciamento del carico in questa architettura non sono concetti nuovi.The steps required for load balancing in this architecture are not new concepts. Il bilanciamento del carico viene infatti ottenuto utilizzando in modo nuovo concetti esistenti e oggetti SSIS comuni.Instead, load balancing is achieved by using existing concepts and common SSIS objects in a new way.

Esecuzione di pacchetti in un'istanza remota tramite SQL Server AgentExecution of Packages on a Remote Instance by using SQL Server Agent

Nell'architettura di base per l'esecuzione di pacchetti remoti è presente un pacchetto centrale che risiede nell'istanza di SQL Server che controlla gli altri pacchetti remoti.In the basic architecture for remote package execution, a central package resides on the instance of SQL Server that controls the other remote packages. Tale pacchetto è illustrato nella figura, con il nome Pacchetto SSIS padre.The diagram shows this central package, named the SSIS Parent. L'istanza in cui risiede tale pacchetto controlla l'esecuzione dei processi di SQL Server Agent che eseguono i pacchetti figlio.The instance where this parent package resides controls execution of the SQL Server Agent jobs that run the child packages. I pacchetti figlio non vengono eseguiti in base a una pianificazione fissa controllata da SQL Server Agent sul server remoto,The child packages are not run according to a fixed schedule controlled by the SQL Server Agent on the remote server. ma vengono avviati da SQL Server Agent quando quest'ultimo viene chiamato dal pacchetto padre e vengono eseguiti nella stessa istanza di SQL Server in cui risiede SQL Server Agent.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.

Per poter eseguire un pacchetto remoto tramite SQL Server Agent, è necessario configurare i pacchetti padre e figlio, quindi configurare i processi di SQL Server Agent che controllano i pacchetti figlio.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. Nelle sezioni seguenti vengono fornite ulteriori informazioni sulle procedure per la creazione, la configurazione, l'esecuzione e la manutenzione di pacchetti eseguiti su server remoti.The following sections provide more information about how to create, configure, run, and maintain packages that run on remote servers. Il processo include numerosi passaggi:There are several steps to this process:

  • Creazione dei pacchetti figlio e installazione di questi ultimi nei server remoti.Creating the child packages and installing them on remote servers.

  • Creazione dei processi di SQL Server Agent sulle istanze remote in cui verranno eseguiti i pacchetti.Creating the SQL Server Agent jobs on the remote instances that will run the packages.

  • Creazione del pacchetto padre.Creating the parent package.

  • Determinazione dello scenario di registrazione per i pacchetti figlio.Determine the logging scenario for the child packages.

Implementazione di pacchetti figlioImplementation of Child Packages

Quando si implementa il bilanciamento del carico tramite Integration ServicesIntegration Services, i pacchetti figlio vengono installati su altri server per sfruttare il tempo di CPU o di server disponibile.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. Per creare ed eseguire i pacchetti figlio è necessario attenersi alla procedura seguente:To create and run the child packages requires the following steps:

  • Progettare i pacchetti figlio.Designing the child packages.

  • Spostare i pacchetti sul server remoto.Moving the packages to the remote server.

  • Creare sul server remoto un processo di SQL Server Agent contenente un passaggio che esegue il pacchetto figlio.Creating a SQL Server Agent Job on the remote server that contains a step that runs the child package.

  • Eseguire il debug e il test del processo di SQL Server Agent e dei pacchetti figlio.Testing and debugging the SQL Server Agent Job and child packages.

    Poiché non sono previste limitazioni, durante la progettazione dei pacchetti figlio è possibile inserire qualsiasi funzionalità nei pacchetti.When you design the child packages, the packages have no limitations in their design, and you can put in any functionality you desire. Se tuttavia il pacchetto deve accedere a dati, è necessario verificare che il server in cui viene eseguito il pacchetto abbia accesso a tali dati.However, if the package accesses data, you must ensure that the server that runs the package has access to the data.

    Per identificare il pacchetto padre che esegue i pacchetti figlio, in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT) fare clic con il pulsante destro del mouse sul pacchetto in Esplora soluzioni e quindi scegliere Pacchetto punto di ingresso.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.

    Terminata la progettazione dei pacchetti figlio è necessario distribuirli nei server remoti.After the child packages have been designed, the next step is to deploy them on the remote servers.

Spostamento dei pacchetti figlio nell'istanza remotaMoving the Child Package to the Remote Instance

Esistono più modi per spostare pacchetti su altri server.There are multiple ways to move packages to other servers. È tuttavia consigliabile utilizzare i due metodi seguenti:The two suggested methods are:

  • Esportazione di pacchetti tramite SQL Server Management StudioSQL Server Management Studio.Exporting packages by using SQL Server Management StudioSQL Server Management Studio.

  • Distribuzione di pacchetti compilando un'utilità di distribuzione per il progetto contenente i pacchetti da distribuire, quindi esecuzione dell'Installazione guidata pacchetti per installare i pacchetti nel file system o in un'istanza di 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. Per altre informazioni, vedere Distribuzione del pacchetto legacy (SSIS).For more information, see Legacy Package Deployment (SSIS).

    È necessario ripetere la distribuzione su tutti i server remoti che si desidera utilizzare.You must repeat the deployment to each remote server you want to use.

Creazione dei processi di SQL Server AgentCreating the SQL Server Agent Jobs

Dopo la distribuzione dei pacchetti figlio sui vari server, creare un processo di SQL Server Agent su ogni server che contiene un pacchetto figlio.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. Il processo di SQL Server Agent deve contenere un passaggio che esegue il pacchetto figlio quando viene chiamato l'agente del processo.The SQL Server Agent job contains a step that runs the child package when the job agent is called. I processi di SQL Server Agent non sono processi pianificati, ma eseguono i pacchetti figlio solo quando vengono chiamati dal pacchetto padre.The SQL Server Agent jobs are not scheduled jobs; they run the child packages only when they are called by the parent package. Nella notifica dell'esito positivo o negativo restituita al pacchetto padre viene comunicato l'esito positivo o negativo del processo di SQL Server Agent, specificando se la chiamata a SQL Server Agent è avvenuta correttamente, ma non viene indicato l'esito positivo o negativo del pacchetto figlio oppure se quest'ultimo è stato eseguito.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.

Debug dei processi di SQL Server Agent e dei pacchetti figlioDebugging the SQL Server Agent Jobs and Child Packages

Per il test dei processi di SQL Server Agent e dei relativi pacchetti figlio è possibile utilizzare uno dei metodi seguenti:You can test the SQL Server Agent jobs and their child packages by using one of the following methods:

  • Eseguire ogni pacchetto figlio in Progettazione SSIS, scegliendo Debug / Avvia senza eseguire debug.Running each child package in SSIS Designer, by clicking Debug / Start Without Debugging.

  • Eseguire ogni singolo processo di SQL Server Agent sul relativo computer remoto, tramite SQL Server Management StudioSQL Server Management Studio, per verificare che il pacchetto venga eseguito.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.

    Per informazioni su come risolvere i problemi legati all'esecuzione di pacchetti dai processi di SQL ServerSQL Server Agent, vedere l'articolo relativo a un pacchetto SSIS che non viene eseguito quando si chiama il pacchetto SSIS da un passaggio di processo di SQL Server Agent nella MicrosoftMicrosoft Knowledge Base.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 Agent verifica l'accesso al sottosistema per un proxy e garantisce l'accesso al proxy a ogni esecuzione del relativo passaggio del processo.The SQL Server Agent checks subsystem access for a proxy and gives access to the proxy every time the job step runs.

    In SQL Server Management StudioSQL Server Management Studioè possibile creare un proxy.You can create a proxy in SQL Server Management StudioSQL Server Management Studio.

Implementazione del pacchetto padreImplementation of the Parent Package

Quando si esegue il bilanciamento del carico dei pacchetti di SSIS tra più server, dopo la creazione e la distribuzione dei pacchetti figlio e dopo la creazione dei processi remoti di SQL Server Agent per eseguirli, è necessario creare il pacchetto padre.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. Il pacchetto padre deve contenere più attività Esegui processo di SQL Server Agent, ognuna della quali è responsabile di chiamare un diverso processo di SQL Server Agent che esegue uno dei pacchetti figlio.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. Le attività Esegui processo di SQL Server Agent nel pacchetto padre eseguono a loro volta i vari processi di SQL Server Agent.The Execute SQL Server Agent Job tasks in the parent package in turn run the various SQL Server Agent jobs. Ogni attività nel pacchetto padre contiene informazioni riguardanti ad esempio la modalità di connessione al server remoto e il processo da eseguire su tale server.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. Per altre informazioni, vedere Execute SQL Server Agent Job Task.For more information, see Execute SQL Server Agent Job Task.

Per identificare il pacchetto padre che esegue i pacchetti figlio, in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT) fare clic con il pulsante destro del mouse sul pacchetto in Esplora soluzioni, quindi scegliere Pacchetto punto di ingresso.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.

Elenco di pacchetti figlioListing Child Packages

Se si distribuisce un progetto contenente un pacchetto padre e pacchetti figlio nel server Integration ServicesIntegration Services , sarà possibile visualizzare un elenco dei pacchetti figlio eseguiti dal pacchetto padre.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. Quando si esegue il pacchetto padre, un report Panoramica per il pacchetto padre è generato automaticamente in 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. Il report include un elenco dei pacchetti figlio eseguiti dall'attività Esegui pacchetto contenuta nel pacchetto padre, come illustrato nell'immagine seguente.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.

Report Panoramica con elenco di pacchetti figlioOverview Report with list of child packages

Per informazioni sull'accesso al report Panoramica , vedere Reports for the Integration Services Server.For information about accessing the Overview report, see Reports for the Integration Services Server.

Vincoli di precedenza nel pacchetto padrePrecedence Constraints in the Parent Package

Quando si creano vincoli di precedenza tra le attività Esegui processo di SQL Server Agent nel pacchetto padre, tali vincoli di precedenza controllano solo il momento in cui vengono avviati i processi di SQL Server Agent sui server remoti.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. I vincoli di precedenza non possono ricevere informazioni sull'esito positivo o negativo dei pacchetti figlio eseguiti dai passaggi dei processi di SQL Server Agent.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.

L'esito positivo o negativo di un pacchetto figlio non viene pertanto propagato al pacchetto padre, perché l'attività Esegui processo di SQL Server Agent nel pacchetto padre ha unicamente la funzione di richiedere al processo di SQL Server Agent di eseguire il pacchetto figlio.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. Se la chiamata al processo di SQL Server Agent viene completata correttamente, il pacchetto padre riceve il risultato Success.After the SQL Server Agent job is called successfully, the parent package receives a result of Success.

In questo scenario l'eventuale esito negativo indica solamente che si è verificato un errore durante la chiamata remota al processo di SQL Server Agent.Failure in this scenario means only that there has been a failure in calling the remote SQL Server Agent Job task. Questa situazione si presenta ad esempio quando il server remoto non è disponibile e l'agente non risponde.One situation where this can occur is when the remote server is down and the agent does not respond. Finché l'agente è attivo, tuttavia, il pacchetto padre completa correttamente l'attività.However, as long as the agent fires, the parent package has successfully completed its task.

Nota

È possibile usare un'attività Esegui SQL contenente un'istruzione Transact-SQL sp_start_job N'package_name'.You can use an Execute SQL Task that contains a Transact-SQL statement of sp_start_job N'package_name'. Per altre informazioni, vedere sp_start_job (Transact-SQL).For more information, see sp_start_job (Transact-SQL).

Ambiente di debugDebugging Environment

Durante il test del pacchetto padre è possibile accedere all'ambiente di debug della finestra di progettazione scegliendo Avvia debug (F5) dal menu Debug.When testing the parent package, use the debugging environment of the designer by running it using Debug / Start Debugging (F5). In alternativa, è possibile usare l'utilità della riga di comando dtexec.Alternatively, you can use the command prompt utility, dtexec. Per altre informazioni, vedere dtexec Utility.For more information, see dtexec Utility.

Registrazione per pacchetti con bilanciamento del carico in server remotiLogging for Load Balanced Packages on Remote Servers

La gestione dei log di tutti i pacchetti figlio in esecuzione su più server risulta più semplice se tutti i pacchetti figlio utilizzano lo stesso provider di log e scrivono nella stessa destinazione.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. Per creare un file di log comune per tutti i pacchetti figlio, è possibile configurare i pacchetti figlio in modo da registrare i propri eventi in un provider di log di tipo 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. È possibile configurare tutti i pacchetti in modo che utilizzino lo stesso database, lo stesso server e la stessa istanza del server.You can configure all the packages to use the same database, the same server, and the same instance of the server.

Per visualizzare tutti i file di log, l'amministratore deve semplicemente accedere a un server e visualizzare il file di log per tutti i pacchetti figlio.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.

Per informazioni su come abilitare la registrazione in un pacchetto, vedere la registrazione di Integration Services (SSIS).For information about how to enable logging in a package, see Integration Services (SSIS) Logging.

Processi di SQL Server Agent per i pacchettiSQL Server Agent Jobs for Packages