Configurazione di operazioni a indici paralleli
Nei computer multiprocessore che eseguono SQL Server Enterprise Edition le istruzioni per gli indici, proprio come le altre query, possono utilizzare più processori per eseguire le operazioni di scansione, ordinamento e indicizzazione associate all'istruzione. Il numero di processori utilizzati per eseguire una singola istruzione per gli indici è determinato dall'opzione di configurazione max degree of parallelism, dal carico di lavoro corrente e dalle statistiche dell'indice. L'opzione max degree of parallelism determina il numero massimo di processori da utilizzare nell'esecuzione di piani paralleli. Se in Motore di database di SQL Server viene rilevato che il sistema è occupato, il grado di parallelismo dell'operazione di indice viene automaticamente ridotto prima che l'esecuzione dell'istruzione venga avviata. Il Motore di database consente inoltre di ridurre il grado di parallelismo se la colonna chiave iniziale di un indice non partizionato ha un numero limitato di valori distinti o se la frequenza di ciascun valore distinto varia in modo significativo.
[!NOTA]
Le operazioni parallele sugli indici sono disponibili solo nelle edizioni Enterprise, Developer ed Evaluation di SQL Server.
Il numero di processori utilizzati da Query Optimizer implica normalmente le prestazioni ottimali. Tuttavia, operazioni come la creazione, la ricostruzione o l'eliminazione di indici di grandi dimensioni utilizzano molte risorse e possono determinare una mancanza di risorse per le altre applicazioni e operazioni di database per la durata dell'operazione di indice. Quando si verifica questo problema, è possibile configurare manualmente il numero massimo di processori utilizzati per eseguire l'istruzione per l'indice specificando l'opzione di indice MAXDOP e limitando il numero di processori da utilizzare per l'operazione di indice.
L'opzione di indice MAXDOP è prioritaria rispetto all'opzione di configurazione max degree of parallelism solo per la query che specifica tale opzione. Nella tabella seguente sono elencati i valori integer validi che è possibile specificare con l'opzione di configurazione max degree of parallelism e l'opzione di indice MAXDOP.
Valore |
Descrizione |
---|---|
0 |
Utilizza il numero effettivo di processori disponibili in base al carico di lavoro corrente del sistema. Si tratta del valore predefinito e dell'impostazione consigliata. |
1 |
Disattiva la generazione di piani paralleli. L'operazione verrà eseguita in modo serializzato. |
2-64 |
Limita il numero di processori al valore specificato. È possibile che il numero possa essere ridotto in base al carico di lavoro corrente. Se viene specificato un valore maggiore di quello delle CPU disponibili, viene utilizzato l'effettivo numero di CPU disponibili. |
L'esecuzione dell'indice in parallelo e l'opzione di indice MAXDOP si applicano alle istruzioni Transact-SQL seguenti:
CREATE INDEX
ALTER INDEX REBUILD
DROP INDEX (si applica solo agli indici cluster).
ALTER TABLE ADD (indice) CONSTRAINT
ALTER TABLE DROP (indice cluster) CONSTRAINT
Quando si utilizza l'opzione di indice MAXDOP sono valide tutte le regole semantiche utilizzate con l'opzione di configurazione max degree of parallelism. Per ulteriori informazioni, vedere Opzione max degree of parallelism.
Quando si esegue ALTER INDEX REORGANIZE con o senza LOB_COMPACTION, il valore di max degree of parallelism è un'operazione a thread singolo. L'opzione di indice MAXDOP non può essere specificata nell'istruzione ALTER INDEX REORGANIZE.
Operazioni di indice in linea
Le operazioni di indice in linea consentono l'attività utente simultanea durante l'operazione di indice. È possibile utilizzare l'opzione MAXDOP per determinare il numero massimo di processori dedicati all'operazione sull'indice in linea. In questo modo, è possibile raggiungere un equilibrio tra risorse utilizzate dall'operazione di indice e dagli utenti simultanei. Per ulteriori informazioni, vedere Esecuzione di operazioni in linea su indici.
Operazioni relative all'indice di partizione
I requisiti di memoria per le operazioni di indice partizionato che richiedono l'ordinamento possono essere maggiori se Query Optimizer applica i gradi di parallelismo all'operazione di generazione. Maggiori i gradi di parallelismo, maggiori i requisiti di memoria. Per ulteriori informazioni, vedere Linee guida specifiche per gli indici partizionati.
Esempi
Nell'esempio seguente viene creato l'indice IX_ProductVendor_VendorID sulla tabella ProductVendor e impostata l'opzione max degree of parallelism su 8. Supponendo che il server disponga di almeno otto processori, Motore di database limiterà l'esecuzione dell'operazione di indice a un massimo di otto processori.
USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'IX_ProductVendor_VendorID')
DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;
GO
CREATE INDEX IX_ProductVendor_VendorID
ON Purchasing.ProductVendor (VendorID)
WITH (MAXDOP=8);
GO
Vedere anche