Configurazione di operazioni parallele sugli indici
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure database SQL in Microsoft Fabric
In questo argomento viene definito il massimo grado di parallelismo e viene spiegato come modificare questa impostazione in SQL Server tramite SQL Server Management Studio o Transact-SQL.
Nei sistemi multiprocessore che eseguono SQL Server Enterprise o versioni successive, le istruzioni per gli indici, proprio come le altre query, possono usare più processori (CPU) per eseguire le operazioni di analisi, ordinamento e indicizzazione associate all'istruzione. Il numero di CPU usate per eseguire una singola istruzione per gli indici è determinato dall'opzione di configurazione relativa al massimo grado di parallelismo, 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 il motore di database di SQL Server rileva che il sistema è occupato, il grado di parallelismo dell'operazione dell'indice viene ridotto automaticamente prima dell'avvio dell'esecuzione dell'istruzione. 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. Per altre informazioni, vedere Guida sull'architettura di elaborazione delle query.
Nota
Le operazioni parallele sugli indici non sono disponibili in tutte le edizioni di SQL Server. Per altre informazioni, vedere Edizioni e funzionalità supportate di SQL Server 2022.
Contenuto dell'articolo
Prima di iniziare:
Per configurare l'opzione max degree of parallelism utilizzando:
Prima di iniziare
Limitazioni e restrizioni
Il numero di processori utilizzati da Query Optimizer implica normalmente le prestazioni ottimali. Tuttavia, operazioni come la creazione, la ricompilazione 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 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. La tabella seguente elenca 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 Specifica che il server determina il numero di CPU utilizzate, a seconda del carico di lavoro del sistema corrente. 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:
DROP INDEX (applicabile solo agli indici cluster).
L'opzione di indice MAXDOP non può essere specificata nell'istruzione
ALTER INDEX (...) REORGANIZE
.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 compilazione. Maggiori i gradi di parallelismo, maggiori i requisiti di memoria. Per ulteriori informazioni, vedere Partitioned Tables and Indexes.
Autorizzazioni
È richiesta l'autorizzazione ALTER
per la tabella o la vista.
Utilizzo di SQL Server Management Studio
Per impostare l'opzione max degree of parallelism su un indice
In Esplora oggetti fare clic sul segno più per espandere il database contenente la tabella in cui si desidera impostare l'opzione max degree of parallelism per un indice.
Espandere la cartella Tabelle .
Fare clic sul segno più per espandere la tabella in cui si desidera impostare l'opzione max degree of parallelism per un indice.
Espandere la cartella Indici .
Fare clic con il pulsante destro del mouse sull'indice per cui si vuole impostare il massimo grado di parallelismo e scegliere Proprietà.
In Selezione paginaselezionare Opzioni.
Selezionare Maximum degree of parallelisme immettere un valore compreso tra 1 e 64.
Fare clic su OK.
Utilizzo di Transact-SQL
Per impostare l'opzione max degree of parallelism su un indice esistente
In Esplora oggetti connettersi a un'istanza del motore di database.
Sulla barra Standard fare clic su Nuova query.
Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.
USE AdventureWorks2022; GO /*Alters the IX_ProductVendor_VendorID index on the Purchasing.ProductVendor table so that, if the server has eight or more processors, the Database Engine will limit the execution of the index operation to eight or fewer processors. */ ALTER INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor REBUILD WITH (MAXDOP=8); GO
Per altre informazioni, vedere ALTER INDEX (Transact-SQL).
Specificare il massimo grado di parallelismo durante la creazione di un nuovo indice
In Esplora oggetti connettersi a un'istanza del motore di database.
Sulla barra Standard fare clic su Nuova query.
Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.
USE AdventureWorks2022; GO CREATE INDEX IX_ProductVendor_NewVendorID ON Purchasing.ProductVendor (BusinessEntityID) WITH (MAXDOP=8); GO
Vedi anche
Guida sull'architettura di elaborazione delle query
CREATE INDEX (Transact-SQL)
ALTER INDEX (Transact-SQL)
DROP INDEX (Transact-SQL)
ALTER TABLE (Transact-SQL)
ALTER TABLE table_constraint (Transact-SQL)
ALTER TABLE index_option (Transact-SQL)