Configurazione del server: massimo grado di parallelismo

Si applica a: SQL Server

Questo articolo descrive come configurare l'opzione di configurazione del server max degree of parallelism (MAXDOP) in SQL Server usando SQL Server Management Studio, Azure Data Studio o Transact-SQL. Quando un'istanza di SQL Server viene eseguita in un computer con più microprocessori o CPU, il motore di database rileva se è possibile usare il parallelismo. Il grado di parallelismo imposta il numero di processori utilizzati per eseguire una singola istruzione per ogni esecuzione di piani paralleli. È possibile utilizzare l'opzione max degree of parallelism per limitare il numero di processori da utilizzare per l'esecuzione di piani paralleli. Per altri dettagli sul limite impostato da max degree of parallelism, vedere la sezione Considerazioni in questa pagina. SQL Server valuta i piani di esecuzione parallela per query, operazioni DDL (Data Definition Language) sugli indici, inserimento parallelo, modifica colonna online, raccolta di statistiche parallela e popolamento dei cursori gestiti da keyset e statici.

SQL Server 2019 (15.x) ha introdotto raccomandazioni automatiche per impostare l'opzione max degree of parallelism di configurazione del server in base al numero di processori disponibili durante il processo di installazione. L'interfaccia utente del programma di installazione consente di accettare le impostazioni consigliate o di immettere valori personalizzati. Per altre informazioni, vedere Pagina Configurazione del motore di database - MaxDOP.

In database SQL di Azure e Istanza gestita di SQL di Azure, l'impostazione MAXDOP predefinita per ogni nuovo database singolo, database del pool elastico e istanza gestita è 8. In database SQL di Azure la MAXDOP configurazione con ambito database è impostata su 8. In Istanza gestita di SQL di Azure l'opzione di configurazione del max degree of parallelism server è impostata su 8.

Per altre informazioni su MAXDOP nel database SQL di Azure, vedere Configurare il massimo grado di parallelismo (MAXDOP) nel database SQL di Azure.

Considerazioni

Questa opzione è avanzata e la relativa modifica è riservata ad amministratori di database esperti o a professionisti con certificazione per SQL Server.

Se l'opzione Affinity Mask non è impostata sul valore predefinito, il numero di processori disponibili per SQL Server in sistemi SMP (Symmetric Multiprocessor) potrebbe risultare ridotto.

L'impostazione max degree of parallelism su consente a 0 SQL Server di usare tutti i processori disponibili fino a 64 processori. Tuttavia, questo non è il valore consigliato per la maggior parte dei casi. Per altre informazioni sui valori consigliati per max degree of parallelism, vedere la sezione Raccomandazioni in questa pagina.

Per eliminare la generazione di piani paralleli, impostare max degree of parallelism su 1. Impostare il valore su un numero compreso tra 1 e 32.767 per specificare il numero massimo di core del processore che può essere usato durante l'esecuzione di una singola query. Se il valore è maggiore di quello dei processori disponibili, viene utilizzato il numero effettivo di processori disponibili. Se il computer dispone di un unico processore, il valore di max degree of parallelism verrà ignorato.

Il limite del massimo grado di parallelismo è impostato per ogni attività. Non è un limite per richiesta o per query. Ciò significa che durante un'esecuzione di query parallela, una singola richiesta può generare più attività fino al limite MAXDOP e ogni attività usa un ruolo di lavoro e un'utilità di pianificazione. Per altre informazioni, vedere la sezione Pianificazione di attività parallele nella guida all'architettura di thread e attività.

È possibile sostituire il valore di configurazione del server max degree of parallelism:

  • A livello di query, usando l'hint per la MAXDOP query o gli hint di Query Store.
  • A livello di database, usando la MAXDOP configurazione con ambito database.
  • A livello di carico di lavoro, usando CREATE MAX_DOP WORKLOAD GROUP.

Le operazioni tramite cui viene creato o ricompilato un indice o eliminato un indice cluster possono richiedere un elevato utilizzo di risorse. È possibile sostituire il valore di max degree of parallelism per le operazioni sugli indici specificando l'opzione per gli indici MAXDOP nell'istruzione per l'indice. Il valore MAXDOP viene applicato all'istruzione al momento dell'esecuzione e non viene archiviato nei metadati dell'indice. Per altre informazioni, vedere Configurazione di operazioni parallele sugli indici.

Oltre alle query e alle operazioni sugli indici, questa opzione controlla anche il parallelismo di DBCC CHECKTABLE, DBCC CHECKDBe DBCC CHECKFILEGROUP. È possibile disabilitare i piani di esecuzione parallela per queste istruzioni utilizzando il flag di traccia 2528. Per altre informazioni, vedere Flag di traccia 2528.

SQL Server 2022 (16.x) ha introdotto Feedback sul grado di parallelismo (DOP), una nuova funzionalità per migliorare le prestazioni delle query identificando le inefficienze del parallelismo nella ripetizione delle query, in base al tempo trascorso e alle attese. Il feedback sul grado di parallelismo fa parte della famiglia di funzionalità di elaborazione intelligente delle query e indirizza l'utilizzo secondario del parallelismo per ripetere le query. Per informazioni sul feedback sul DOP, vedere Feedback sul grado di parallelismo (DOP).

Consigli

In SQL Server 2016 (13.x) e versioni successive, durante l'avvio del servizio se il motore di database rileva più di otto core fisici per nodo O socket NUMA all'avvio, i nodi soft-NUMA vengono creati automaticamente per impostazione predefinita. Il motore di database inserisce processori logici dello stesso core fisico in nodi soft-NUMA diversi. Le raccomandazioni nella tabella seguente sono destinate a mantenere tutti i thread di lavoro di una query parallela all'interno dello stesso nodo soft-NUMA. Ciò migliora le prestazioni delle query e la distribuzione dei thread di lavoro tra i nodi NUMA per il carico di lavoro. Per altre informazioni, vedere Soft-NUMA (SQL Server).

In SQL Server 2016 (13.x) e versioni successive usare le linee guida seguenti quando si configura il valore di configurazione del max degree of parallelism server:

Configurazione del server Numero di processori Indicazioni
Server con un singolo nodo NUMA Minore o uguale a otto processori logici Mantenere MAXDOP in corrispondenza o al numero di processori logici
Server con un singolo nodo NUMA Più di otto processori logici Mantenere MAXDOP su 8
Server con più nodi NUMA Minore o uguale a 16 processori logici per nodo NUMA Mantenere MAXDOP in corrispondenza o sotto il numero di processori logici per nodo NUMA
Server con più nodi NUMA Più di 16 processori logici per nodo NUMA Impostare per MAXDOP su un valore pari alla metà del numero di processori logici per nodo NUMA senza superare il valore MAX di 16

Il nodo NUMA nella tabella precedente fa riferimento ai nodi soft-NUMA creati automaticamente da SQL Server 2016 (13.x) e versioni successive oppure ai nodi NUMA basati su hardware se soft-NUMA è disabilitato.

Usare le stesse linee guida quando si imposta l'opzione max degree of parallelism per gruppi di carico di lavoro di Resource Governor. Per altre informazioni, vedere CREATE WORKLOAD GROUP.

SQL Server 2014 e versioni precedenti

Da SQL Server 2008 (10.0.x) a SQL Server 2014 (12.x), usare le linee guida seguenti quando si configura il valore di configurazione del server max degree of parallelism:

Configurazione del server Numero di processori Indicazioni
Server con un singolo nodo NUMA Minore o uguale a otto processori logici Mantenere MAXDOP in corrispondenza o al numero di processori logici
Server con un singolo nodo NUMA Più di otto processori logici Mantenere MAXDOP su 8
Server con più nodi NUMA Minore o uguale a otto processori logici per nodo NUMA Mantenere MAXDOP in corrispondenza o sotto il numero di processori logici per nodo NUMA
Server con più nodi NUMA Più di otto processori logici per nodo NUMA Mantenere MAXDOP su 8

Autorizzazioni

Le autorizzazioni di esecuzione per sp_configure senza alcun parametro o solo con il primo parametro vengono assegnate per impostazione predefinita a tutti gli utenti. Per eseguire sp_configure con entrambi i parametri per la modifica di un'opzione di configurazione o per l'esecuzione dell'istruzione RECONFIGURE, a un utente deve essere concessa l'autorizzazione a livello di server ALTER SETTINGS. L'autorizzazione ALTER SETTINGS è assegnata implicitamente ai ruoli predefiniti del serversysadmin e serveradmin.

Usare SQL Server Management Studio (SSMS) o Azure Data Studio

In Azure Data Studio installare l'estensione Database Admin Tool Extensions for Windows o usare il metodo T-SQL seguente.

Queste opzioni modificano l'oggetto MAXDOP per l'istanza di .

  1. In Esplora oggetti fare clic con il pulsante destro del mouse sull'istanza desiderata e selezionare Proprietà.

  2. Selezionare il nodo Avanzate.

  3. Nella casella Max Degree of Parallelism selezionare il numero massimo di processori da utilizzare nell'esecuzione di piani paralleli.

Usare Transact-SQL

  1. Connettersi al motore di database con SQL Server Management Studio o Azure Data Studio.

  2. Nella barra Standard selezionare Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra di query e selezionare Esegui. In questo esempio si illustra come utilizzare sp_configure per configurare l'opzione max degree of parallelism su 16.

    USE master;
    GO
    
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE WITH OVERRIDE;
    GO
    
    EXECUTE sp_configure 'max degree of parallelism', 16;
    GO
    
    RECONFIGURE WITH OVERRIDE;
    GO
    
    EXECUTE sp_configure 'show advanced options', 0;
    GO
    
    RECONFIGURE;
    GO
    

Per altre informazioni, vedere Opzioni di configurazione del server.

Completamento: Dopo aver configurato l'opzione max degree of parallelism

L'impostazione diventa effettiva immediatamente senza dover riavviare il server.