Opzione di configurazione del server affinity mask

Note

Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Non usare questa funzionalità nel nuovo lavoro di sviluppo e modificare le applicazioni che attualmente usano questa funzionalità il prima possibile. Usare ALTER SERVER CONFIGURATION (Transact-SQL) .

Per eseguire il multitasking, Microsoft Windows talvolta spostare i thread di processo tra processori diversi. Anche se in questo modo viene garantita una maggiore efficienza del sistema operativo, questa attività può comportare una riduzione delle prestazioni di SQL Server nel caso di carichi di lavoro elevati, poiché la cache di ogni processore viene ricaricata più volte con dati. L'assegnazione di processori a thread specifici può migliorare le prestazioni in queste condizioni eliminando i ricaricamenti del processore e riducendo la migrazione dei thread tra processori (riducendo così il cambio di contesto); tale associazione tra un thread e un processore è detta affinità del processore.

SQL Server supporta l'affinità del processore tramite due opzioni affinity mask: affinity mask (nota anche come maschera di affinità CPU) e affinity I/O mask. Per altre informazioni sull'opzione affinity I/O mask, vedere affinity Input-Output mask Server Configuration Option.For more information on the affinity I/O mask maskoption, see affinity Input-Output mask Server Configuration Option. Il supporto dell'affinità di CPU e I/O per i server con processori da 33 a 64 richiede rispettivamente l'uso aggiuntivo dell'opzione di configurazione del server affinity64 mask e affinity64 Input-Output mask Server Configuration Option.

Note

Il supporto dell'affinità nei server dotati di un numero di processori compreso tra 33 e 64 è disponibile solo su sistemi operativi a 64 bit.

L'opzione affinity mask, disponibile nelle versioni precedenti di SQL Server, controlla dinamicamente l'affinità della CPU.

In SQL Server l'opzione affinity mask può essere configurata senza richiedere un riavvio dell'istanza di SQL Server. Quando si usa sp_configure, è necessario eseguire RECONFIGURE o RECONFIGURE WITH OVERRIDE dopo aver impostato un'opzione di configurazione. Quando si usa SQL Server Express, la modifica dell'opzione affinity mask richiede un riavvio.

Le modifiche alle maschere di affinità vengono eseguite in modo dinamico, consentendo l'avvio e l'arresto su richiesta delle utilità di pianificazione della CPU che associano i thread dei processi all'interno di SQL Server. Questa situazione si può verificare quando le condizioni nel server vengono modificate. Ad esempio, se al server viene aggiunta una nuova istanza di SQL Server, potrebbe essere necessario apportare modifiche all'opzione affinity mask per ridistribuire il carico del processore.

Per le modifiche alle maschere di bit di affinità, è necessario che SQL Server abiliti una nuova utilità di pianificazione della CPU e disabiliti quella esistente. I nuovi batch possono quindi essere elaborati con le nuove utilità di pianificazione o con quelle rimanenti.

Per avviare una nuova utilità di pianificazione della CPU, SQL Server crea una nuova utilità di pianificazione e la aggiunge all'elenco di quelle standard. Il nuovo scheduler viene considerato solo per i nuovi batch in arrivo. I batch correnti continuano a essere eseguiti sullo stesso pianificatore. I worker passano al nuovo scheduler via via che si rendono disponibili, o quando ne vengono creati di nuovi.

L'arresto di un'utilità di pianificazione richiede che tutti i batch presenti nell'utilità di pianificazione completino le loro attività e terminino. Un'utilità di pianificazione che è stata arrestata viene contrassegnata come offline in modo che non sia pianificato alcun nuovo batch.

Se viene aggiunta o rimossa una nuova utilità di pianificazione, le attività di sistema permanenti, ad esempio lockmonitor, checkpoint, thread di attività di sistema (elaborazione DTC) e processo di segnalazione continuano a essere eseguite nell'utilità di pianificazione mentre il server è operativo. Queste attività di sistema permanenti non eseguono la migrazione dinamica. Per ridistribuire il carico del processore per queste attività di sistema tra utilità di pianificazione, è necessario riavviare l'istanza di SQL Server. Se SQL Server tenta di chiudere un'utilità di pianificazione associata a un'attività di sistema permanente, l'esecuzione dell'attività continua nell'utilità di pianificazione offline (nessuna migrazione). L'utilità di pianificazione è associata ai processori nella maschera di affinità modificata e non deve inserire alcun carico sul processore con cui è stata eseguita l'affinità con prima della modifica. La presenza di utilità di pianificazione offline aggiuntive non dovrebbe influire significativamente sul carico del sistema. In caso contrario, per riconfigurare queste attività è necessario un riavvio del server di database.

Le attività di affinità di I/O (ad esempio lazywriter e logwriter) sono direttamente interessate dalla maschera di affinità di I/O. Se le attività lazywriter e logwriter non sono affinizzate, seguono le stesse regole definite per le altre attività permanenti, ad esempio lockmonitor o checkpoint.

Per assicurarsi che la nuova maschera di affinità sia valida, il comando RECONFIGURE verifica che le normali affinità di CPU e I/O si escludono a vicenda. In caso contrario, viene segnalato un messaggio di errore alla sessione client e al log degli errori SQL Server, a indicare che tale impostazione non è consigliata. L'esecuzione di opzioni RECONFIGURE WITH OVERRIDE consente le affinità di CPU e I/O che non si escludono a vicenda.

Se si specifica una maschera di affinità che tenta di eseguire il mapping a una CPU inesistente, il comando RECONFIGURE segnala un messaggio di errore sia alla sessione client che al log degli errori SQL Server. L'uso dell'opzione RECONFIGURE WITH OVERRIDE non ha alcun effetto in questo caso e lo stesso errore di configurazione viene segnalato di nuovo.

È anche possibile escludere SQL Server attività dai processori assegnati assegnazioni di carico di lavoro specifiche dal sistema operativo Windows 2000 o Windows Server 2003. Se si imposta un bit che rappresenta un processore su 1, tale processore viene selezionato dal Motore di database di SQL Server per l'assegnazione di thread. Quando si imposta su affinity mask 0 (impostazione predefinita), gli algoritmi di pianificazione Microsoft Windows 2000 o Windows Server 2003 impostano l'affinità del thread. Se l'opzione affinity mask viene impostata su un valore diverso da zero, l'affinità di SQL Server interpreta il valore come maschera di bit indicante i processori selezionabili.

Separando SQL Server thread dall'esecuzione su processori specifici, Microsoft Windows 2000 o Windows Server 2003 può valutare meglio la gestione dei processi specifici del sistema per Windows. Ad esempio, in un server a 8 CPU che esegue due istanze di SQL Server (istanza A e B), l'amministratore di sistema potrebbe usare l'opzione affinity mask per assegnare il primo set di 4 CPU all'istanza A e il secondo set di 4 a istanza B. Per configurare più di 32 processori, impostare sia la maschera di affinità che la maschera affinity64. I valori per l'opzione affinity mask sono i seguenti:

  • Un byte affinity mask copre fino a 8 CPU in un computer multiprocessore.

  • Un doppio byte affinity mask copre fino a 16 CPU in un computer multiprocessore.

  • Un tre byte affinity mask copre fino a 24 CPU in un computer multiprocessore.

  • Un quattro byte affinity mask copre fino a 32 CPU in un computer multiprocessore.

  • Per coprire più di 32 CPU, configurare una maschera di affinità a quattro byte per le prime 32 CPU e fino a una maschera di affinità a quattro byte64 per le CPU rimanenti.

Poiché l'impostazione SQL Server'affinità del processore è un'operazione specializzata, è consigliabile usarla solo quando necessario. Nella maggior parte dei casi, l'affinità predefinita Microsoft Windows 2000 o Windows Server 2003 offre prestazioni ottimali. Quando si impostano le maschere di affinità, è consigliabile considerare anche i requisiti della CPU per altre applicazioni. Per ulteriori informazioni, consultare la documentazione di Windows.

Note

È possibile usare il monitoraggio di sistema Windows per visualizzare e analizzare l'utilizzo dei singoli processori.

Quando si specifica l'opzione affinity I/O mask, è necessario usarla in connessione con l'opzione di configurazione affinity mask. Non abilitare la stessa CPU sia nell'opzione affinity mask switch che nell'opzione affinity I/O mask. Lo stato dei bit corrispondenti a ogni CPU deve essere uno dei tre seguenti:

  • 0 sia nell'opzione affinity mask che nell'opzione affinity I/O mask.

  • 1 nell'opzione affinity mask e 0 nell'opzione affinity I/O mask.

  • 0 nell'opzione affinity mask e 1 nell'opzione affinity I/O mask.

Caution

Non configurare l'affinità cpu nel sistema operativo Windows e configurare anche la maschera di affinità in SQL Server. Le due impostazioni mirano a ottenere lo stesso risultato e, se le configurazioni sono incoerenti, potrebbero causare risultati imprevisti. SQL Server l'affinità cpu è configurata meglio usando l'opzione sp_configure in SQL Server.

Esempio

Come esempio di impostazione dell'opzione affinity mask, se i processori 1, 2 e 5 vengono selezionati come disponibili con bit 1, 2 e 5 impostati su 1 e bit 0, 3, 4, 6 e 7 impostati su 0, viene specificato un valore esadecimale di 0x26 o l'equivalente decimale di 38 . Numerare i bit da destra a sinistra. L'opzione affinity mask avvia il conteggio dei processori da 0 a 31, in modo che nell'esempio seguente il contatore 1 rappresenti il secondo processore nel server.

sp_configure 'show advanced options', 1;  
RECONFIGURE;  
GO  
sp_configure 'affinity mask', 38;  
RECONFIGURE;  
GO  

Si tratta di affinity mask valori per un sistema a 8 CPU.

Valore decimale Maschera di bit binaria Consentire i thread di SQL Server sui processori
1 00000001 0
3 00000011 0 e 1
7 00000111 0, 1 e 2
15 00001111 0, 1, 2 e 3
31 00011111 0, 1, 2, 3 e 4
63 00111111 0, 1, 2, 3, 4 e 5
127 01111111 0, 1, 2, 3, 4, 5 e 6
255 11111111 0, 1, 2, 3, 4, 5, 6 e 7

L'opzione affinity mask è un'opzione avanzata. Se si usa la stored procedure di sistema sp_configure per modificare l'impostazione, è possibile modificare affinity mask solo quando le opzioni avanzate sono impostate su 1. Dopo aver eseguito il comando Transact-SQL RECONFIGURE, la nuova impostazione diventa effettiva immediatamente senza richiedere un riavvio dell'istanza di SQL Server.

Accesso non uniforme alla memoria (NUMA)

Quando si usa l'accesso alla memoria non uniforme (NUMA) basato su hardware e viene impostata la maschera di affinità, ogni utilità di pianificazione in un nodo verrà affinizzata con la propria CPU. Quando la maschera di affinità non è impostata, ogni utilità di pianificazione viene affinizzata con il gruppo di CPU all'interno del nodo NUMA e un'utilità di pianificazione mappata al nodo NUMA N1 può pianificare il lavoro su qualsiasi CPU nel nodo, ma non sulle CPU associate a un altro nodo.

Le operazioni eseguite in un solo nodo NUMA possono utilizzare solo pagine del buffer di tale nodo. Quando un'operazione viene eseguita in parallelo sulle CPU di più nodi, è possibile utilizzare la memoria di tutti i nodi coinvolti.

Problemi di licenza

L'affinità dinamica è strettamente correlata alle licenze per le CPU. SQL Server non consente alcuna configurazione di opzioni affinity mask che violano i criteri di licenza.

Startup

Se una maschera di affinità specificata viola i criteri di licenza durante SQL Server'avvio o durante il collegamento del database, il livello del motore completerà il processo di avvio o l'operazione di collegamento/ripristino del database e quindi reimposta il valore di esecuzione sp_configure per la maschera di affinità su zero, inviando un messaggio di errore al log degli errori SQL Server.

Riconfigurare

Se una maschera di affinità specificata viola i criteri di licenza durante l'esecuzione di Transact-SQL comando RECONFIGURE, viene segnalato un messaggio di errore alla sessione client e al log degli errori SQL Server, richiedendo all'amministratore del database di riconfigurare la maschera di affinità. In questo caso non viene accettato alcun comando RECONFIGURE WITH OVERRIDE.

Vedere anche

Monitoraggio dell'utilizzo delle risorse (Monitor di sistema)
RECONFIGURE (Transact-SQL)
Opzioni di configurazione del server (SQL Server)
sp_configure (Transact-SQL)
ALTER SERVER CONFIGURATION (Transact-SQL)