Share via


Esecuzione di operazioni batch (XMLA)

Il comando Batch in XML for Analysis (XMLA) consente di eseguire più comandi XMLA utilizzando un unico metodo Execute XMLA. È possibile eseguire più comandi contenuti nel comando Batch come una transazione singola o in transazioni separate per ogni comando, in serie o in parallelo. Nel comando Batch è inoltre possibile specificare associazioni out-of-line e altre proprietà per l'elaborazione di più oggetti MicrosoftSQL ServerAnalysis Services.

Esecuzione di comandi Batch transazionali e non transazionali

Il comando Batch consente di eseguire comandi in una delle due modalità riportate di seguito:

  • Transazionale
    Se l'attributo Transaction del comando Batch è impostato su true, tutti i comandi contenuti nel comando Batch vengono eseguiti in una transazione singola, ovvero come un batch transazionale.

    Se in un batch transazionale un comando non riesce, in Analysis Services viene eseguito il rollback di qualsiasi comando nel comando Batch eseguito prima del comando non riuscito e il comando Batch termina immediatamente. Viene inoltre sospesa l'esecuzione di tutti i comandi nel comando Batch non ancora eseguiti. Una volta completato, il comando Batch segnala tutti gli errori che si sono verificati relativi al comando non riuscito.

  • Non transazionale
    Se l'attributo Transaction è impostato su false, ogni comando contenuto nel comando Batch viene eseguito in una transazione separata, ovvero in un batch non transazionale. Se in un batch non transazionale un comando non riesce, il comando Batch continua a eseguire i comandi successivi al comando non riuscito. Dopo avere tentato di eseguire tutti i comandi che contiene, il comando Batch segnala tutti gli errori che si sono verificati.

Tutti i risultati relativi ai comandi contenuti in un comando Batch vengono restituiti nello stesso ordine in cui i comandi sono contenuti nel comando Batch stesso. I risultati restituiti da un comando Batch possono variare a seconda che il comando Batch sia transazionale o non transazionale.

[!NOTA]

Se un comando Batch contiene un comando che non restituisce alcun output, ad esempio il comando Lock, e tale comando viene eseguito correttamente, il comando Batch restituisce un elemento root vuoto all'interno dell'elemento results. Se l'elemento root è vuoto, ogni comando contenuto in un comando Batch può essere messo in corrispondenza con l'elemento root appropriato per i risultati del comando specifico.

Restituzione di risultati di un batch transazionale

I risultati di comandi eseguiti all'interno di un batch transazionale non vengono restituiti fino a quando l'intero comando Batch non è stato completato. I risultati non vengono restituiti dopo ciascuna esecuzione di un comando poiché qualsiasi comando che non riesce in un batch transazionale provocherebbe l'esecuzione del rollback dell'intero comando Batch e di tutti i comandi che contiene. Se tutti i comandi vengono avviati ed eseguiti in modo corretto, l'elemento return dell'elemento ExecuteResponse restituito dal metodo Execute per il comando Batch contiene un elemento results, che a sua volta contiene un elemento root per ogni comando eseguito correttamente contenuto nel comando Batch. Se non è possibile avviare o completare un comando contenuto nel comando Batch, il metodo Execute restituisce un errore SOAP per il comando Batch che contiene l'errore relativo al comando non riuscito.

Restituzione di risultati di un batch non transazionale

I risultati di comandi eseguiti in un batch non transazionale vengono restituiti nell'ordine in cui tali comandi sono contenuti nel comando Batch e nel modo in cui vengono restituiti da ogni comando. Se non è possibile avviare alcun comando contenuto nel comando Batch, il metodo Execute restituisce un errore SOAP relativo al comando Batch. Se almeno un comando viene avviato in modo corretto, l'elemento return dell'elemento ExecuteResponse restituito dal metodo Execute per il comando Batch contiene un elemento results, che a sua volta contiene un elemento root per ogni comando contenuto nel comando Batch. Se non è possibile avviare o completare uno o più comandi in un batch non transazionale, l'elemento root relativo al comando non riuscito contiene un elemento error che descrive l'errore che si è verificato.

[!NOTA]

L'esecuzione di un batch non transazionale viene considerata corretta purché sia possibile avviare almeno un comando contenuto nel batch, anche se ogni comando presente nel batch non transazionale restituisce un errore nei risultati del comando Batch.

Esecuzione in serie e parallela

Il comando Batch consente di eseguire i comandi inclusi serie o in parallelo. Quando i comandi vengono eseguiti in serie, il comando successivo incluso nel comando Batch non può essere avviato fino a quando il comando attualmente in esecuzione nel comando Batch non è completato. Quando i comandi vengono eseguiti in parallelo, il comando Batch può eseguire contemporaneamente più comandi.

Per eseguire comandi in parallelo, è necessario aggiungerli alla proprietà Parallel del comando Batch. Attualmente, in Analysis Services è possibile eseguire in parallelo solo comandi Process contigui e sequenziali. Qualsiasi altro comando XMLA, ad esempio Create o Alter, incluso nella proprietà Parallel viene eseguito in serie.

In Analysis Services viene effettuato un tentativo di eseguire tutti i comandi Process inclusi nella proprietà Parallel in parallelo, ma non è possibile garantire che questa operazione sia possibile per tutti i comandi Process inclusi. L'istanza analizza ogni comando Process. Un comando Process viene eseguito in serie se l'istanza determina che non può essere eseguito in parallelo.

[!NOTA]

Per eseguire comandi in parallelo, l'attributo Transaction del comando Batch deve essere impostato su true poiché in Analysis Services è supportata solo una transazione attiva per connessione e i batch non transazionali eseguono ogni comando in una transazione separata. Se in un batch non transazionale viene inclusa la proprietà Parallel, si verifica un errore.

Impostazioni di limiti all'esecuzione parallela

Un'istanza di Analysis Services tenta di eseguire in parallelo il maggior numero di comandi Process possibile, fino ai limiti specifici del computer in cui è eseguita l'istanza. Per limitare il numero di comandi Process eseguiti simultaneamente, è possibile impostare l'attributo maxParallel della proprietà Parallel su un valore che indica il numero massimo di comandi Process che possono essere eseguiti in parallelo.

Una proprietà Parallel, ad esempio, contiene i comandi seguenti nella sequenza elencata:

  1. Create

  2. Process

  3. Alter

  4. Process

  5. Process

  6. Process

  7. Delete

  8. Process

  9. Process

L'attributo maxParallel di tale proprietà Parallel è impostato su 2. Di conseguenza l'istanza esegue gli elenchi precedenti di comandi nel modo descritto nell'elenco seguente:

  • Il comando 1 viene eseguito in serie poiché è un comando Create e solo i comandi Process possono essere eseguiti in parallelo.

  • Il comando 2 viene eseguito in serie dopo il completamento del comando 1.

  • Il comando 3 viene eseguito in serie dopo il completamento del comando 2.

  • I comandi 4 e 5 vengono eseguiti in parallelo dopo il completamento del comando 3. Sebbene il comando 6 sia anche un comando Process, non può essere eseguito in parallelo con i comandi 4 e 5 poiché la proprietà maxParallel è impostata su 2.

  • Il comando 6 viene eseguito in serie dopo il completamento dei comandi 4 e 5.

  • Il comando 7 viene eseguito in serie dopo il completamento del comando 6.

  • I comandi 8 e 9 vengono eseguiti in parallelo dopo il completamento del comando 7.

Utilizzo del comando Batch per l'elaborazione di oggetti

Il comando Batch contiene numerosi attributi e proprietà facoltativi specifici per supportare l'elaborazione di più progetti di Analysis Services, come indicato di seguito.

  • L'attributo ProcessAffectedObjects del comando Batch indica se l'istanza deve elaborare anche qualsiasi oggetto per cui è necessario rieseguire l'elaborazione a seguito del risultato di un comando Process incluso in un comando Batch che elabora un oggetto specificato.

  • La proprietà Bindings contiene una raccolta di associazioni out-of-line utilizzate da tutti i comandi Process contenuti nel comando Batch.

  • La proprietà DataSource contiene un'associazione out-of-line per un'origine dati utilizzata da tutti i comandi Process contenuti nel comando Batch.

  • La proprietà DataSourceView contiene un'associazione out-of-line per una vista origine dati utilizzata da tutti i comandi Process contenuti nel comando Batch.

  • La proprietà ErrorConfiguration specifica il modo in cui il comando Batch gestisce gli errori che si verificano in tutti i comandi Process contenuti nel comando Batch.

    Nota importanteImportante

    Un comando Process non può includere la proprietà Bindings, DataSource, DataSourceView o ErrorConfiguration se il comando Process è contenuto in un comando Batch. Se è necessario specificare queste proprietà per un comando Process, fornire le informazioni necessarie nelle proprietà corrispondenti del comando Batch che contiene il comando Process.