Condividi tramite


Operazioni parallele sugli indici

I piani di query elaborati ai fini della creazione o della ricostruzione di un indice, oppure dell'eliminazione di un indice cluster, consentono in computer con più microprocessori di eseguire operazioni parallele a thread multipli.

[!NOTA]

Le operazioni parallele sugli indici sono disponibili solo in SQL Server 2008 Enterprise Edition.

In SQL Server, per determinare il grado di parallelismo (il numero totale di singoli thread da eseguire) delle operazioni sugli indici vengono utilizzati gli stessi algoritmi utilizzati per altre query. Il grado massimo di parallelismo per un'operazione sugli indici dipende dal valore impostato per l'opzione di configurazione del server massimo grado di parallelismo. È possibile ignorare il valore dell'opzione massimo grado di parallelismo per singole operazioni sull'indice impostando l'opzione per gli indici MAXDOP nelle istruzioni CREATE INDEX, ALTER INDEX, DROP INDEX e ALTER TABLE.

Quando tramite Motore di database viene creato un piano di esecuzione dell'indice, il numero di operazioni parallele è impostato sul valore più basso tra i seguenti:

  • Il numero di microprocessori, o CPU, del computer.

  • Il numero specificato per l'opzione di configurazione del server massimo grado di parallelismo.

  • Il numero di CPU che non hanno già superato una determinata soglia di carico di elaborazione per l'esecuzione dei thread di SQL Server.

Ad esempio, in un computer con 8 CPU in cui, tuttavia, l'opzione massimo grado di parallelismo è impostata su 6, per un'operazione sugli indici verranno generati al massimo 6 thread paralleli. Se 5 CPU del computer hanno superato la soglia di carico di elaborazione per SQL Server al momento della creazione del piano di esecuzione per l'indice, il piano utilizzerà solo 3 thread paralleli.

Le fasi principali di un'operazione parallela sugli indici includono quanto segue:

  • Un thread di coordinamento esegue rapidamente la scansione casuale della tabella per produrre una stima della distribuzione delle chiavi dell'indice. Il thread di coordinamento stabilisce i limiti delle chiavi in base ai quali verrà creato un numero di intervalli di chiavi equivalente al grado di operazioni parallele. Ogni intervallo di chiavi copre un numero di righe simile. Se ad esempio la tabella include 4 milioni di righe e il grado di parallelismo è 4, il thread di coordinamento determinerà i valori di chiave che delimitano 4 set di righe che includono 1 milione di righe ciascuno. Se non è possibile stabilire un numero sufficiente di intervalli di chiavi per utilizzare tutte le CPU, il grado di parallelismo viene ridotto di conseguenza.

  • Il thread di coordinamento esegue il recapito di un numero di thread pari al grado di operazioni parallele e attende che tali thread completino le rispettive operazioni. Ogni thread esegue la scansione della tabella di base utilizzando un filtro che recupera solo le righe con valori di chiave inclusi nell'intervallo assegnato al thread. Ogni thread crea una struttura di indice per le righe del rispettivo intervallo di chiavi. Nel caso di indici partizionati ogni thread crea un numero specifico di partizioni. Le partizioni non sono condivise tra i thread. Per ulteriori informazioni sulla costruzione di un indice, vedere tempdb e creazione dell'indice.

  • Quando tutti i thread paralleli sono stati completati, il thread di coordinamento connette le sottounità dell'indice in un unico indice. Questa fase viene eseguita solo nelle operazioni sugli indici non in linea.

Singole istruzioni CREATE TABLE o ALTER TABLE possono avere più vincoli che richiedono la creazione di un indice. Le operazioni di creazione dell'indice vengono eseguite in serie, anche se in un computer con più CPU ogni singola operazione può essere eseguita in parallelo.