Opzione affinity mask

Data aggiornamento: 5 dicembre 2005

Per realizzare il multitasking, Microsoft Windows 2000 e Windows Server 2003 a volte spostano i thread dei processi in processori diversi. Ciò garantisce una maggiore efficienza del sistema operativo, tuttavia può comportare una riduzione delle prestazioni di Microsoft SQL Server nel caso di carichi di lavoro elevati, poiché la cache di ogni processore viene ricaricata più volte con dati. In questi casi, l'assegnazione dei processori a thread specifici consente di aumentare le prestazioni poiché vengono eliminate le operazioni di ricaricamento dei processori e viene ridotta la migrazione dei thread tra i processori, limitando lo scambio di contesto. Questo tipo di associazione tra un thread e un processore è definita affinità processori.

SQL Server 2005 supporta l'affinità processori tramite due opzioni affinity mask: affinity mask (nota anche come CPU affinity mask) e affinity I/O mask. Per ulteriori informazioni sull'opzione affinity I/O mask , vedere Opzione affinity I/O mask. Per il supporto dell'affinità di I/O e di CPU nei server con un numero di processori compreso tra 33 e 64 è inoltre necessario utilizzare rispettivamente Opzione affinity64 mask e Opzione affinity64 I/O mask.

[!NOTA] Il supporto dell'affinità per i server con un numero di processori compreso tra 33 e 64 è disponibile unicamente nei sistemi operativi a 64 bit.

L'opzione affinity mask, disponibile nelle versioni precedenti di SQL Server, controlla in modo dinamico l'affinità di CPU.

In Microsoft SQL Server 2005, è possibile configurare l'opzione affinity mask senza che sia necessario riavviare l'istanza di SQL Server. Se si utilizza sp_configure, dopo avere impostato un'opzione di configurazione è necessario eseguire l'istruzione RECONFIGURE o RECONFIGURE WITH OVERRIDE. Se si utilizza SQL Server Express, la modifica dell'opzione affinity mask non richiede il riavvio.

Le modifiche alle maschere di affinità vengono eseguite in modo dinamico, consentendo l'avvio e l'arresto a 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 nel server viene aggiunta una nuova istanza di SQL Server, potrebbe essere necessario modificare l'opzione affinity mask per ridistribuire il carico dei processori.

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. È quindi possibile elaborare nuovi batch nelle nuove utilità di pianificazione o in 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. La nuova utilità di pianificazione viene presa in considerazione unicamente per i nuovi batch in entrata. L'esecuzione dei batch correnti continua nella stessa utilità di pianificazione. I thread di lavoro migrano alla nuova utilità di pianificazione man mano che si liberano o che ne vengono creati di nuovi.

Per chiudere un'utilità di pianificazione, è necessario che tutti i batch nell'utilità abbiano completato le relative attività e interrompano l'esecuzione. Un'utilità di pianificazione che è stata chiusa viene contrassegnata come non in linea, in modo che non venga pianificato alcun nuovo batch su di essa.

Se viene aggiunta o rimossa una nuova utilità di pianificazione, le attività di sistema permanenti quali lockmonitor, checkpoint, i thread delle attività di sistema (elaborazione DTC) e signal process proseguono l'esecuzione mentre il server è operativo. Queste attività di sistema permanenti non eseguono la migrazione in modo dinamico. Per ridistribuire il carico del processore di queste attività nelle 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 non in linea (nessuna migrazione). L'utilità di pianificazione è associata ai processori nella maschera di affinità modificata e non dovrebbe applicare alcun carico al processore con il quale è stata creata l'affinità prima della modifica. La presenza di utilità di pianificazione non in linea aggiuntive non dovrebbe influire in modo significativo sul carico del sistema. In caso contrario, per riconfigurare queste attività è necessario riavviare il server di database.

La maschera di affinità di I/O influisce direttamente sui processi di affinità di I/O, ad esempio i processi Lazywriter e i thread per la scrittura nel log. Se per i processi Lazywriter e i thread per la scrittura nel log non viene creata un'affinità, essi seguono le stesse regole definite per le attività permanenti, ad esempio lockmonitor o checkpoint.

Per garantire che la nuova maschera di affinità sia valida, il comando RECONFIGURE verifica che le affinità di CPU e I/O si escludano a vicenda. In caso contrario, nella sessione del client e nel log degli errori di SQL Server viene visualizzato un messaggio di errore che indica che l'impostazione non è corretta. Per consentire affinità di CPU e di I/O che non si escludono a vicenda, è possibile eseguire le opzioni RECONFIGURE WITH OVERRIDE.

Se si specifica una maschera di affinità che tenta di eseguire il mapping a una CPU non esistente, il comando RECONFIGURE visualizza un messaggio di errore nella sessione client e nel log degli errori di SQL Server. In questo caso, l'utilizzo dell'opzione RECONFIGURE WITH OVERRIDE non avrà alcun effetto e verrà visualizzato di nuovo lo stesso errore di configurazione.

È inoltre possibile escludere l'attività di SQL Server da processori ai quali sono stati assegnati carichi di lavoro specifici nei sistemi operativi Windows 2000 o Windows Server 2003. Se si imposta su 1 un bit corrispondente a un processore, il processore viene selezionato dal Motore di database di SQL Server per l'assegnazione di thread. Se si imposta affinity mask su 0 (impostazione predefinita), l'affinità del thread viene impostata dagli algoritmi di pianificazione di Microsoft Windows 2000 o Windows Server 2003. 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.

L'esclusione dei thread SQL Server da processori specifici consente a Microsoft Windows 2000 o Windows Server 2003 di valutare adeguatamente la gestione dei processi specifici di Windows. Ad esempio, per un server con 8 CPU nel quale sono in esecuzione due istanze di SQL Server (istanza A e B), l'amministratore di sistema può utilizzare l'opzione affinity mask per assegnare il primo gruppo di 4 CPU all'istanza A e il secondo gruppo di 4 CPU all'istanza B. Per configurare più di 32 processori, impostare entrambe le opzioni affinity mask e affinity64 mask. I valori per l'opzione affinity mask sono i seguenti:

  • Un valore affinity mask da 1 byte consente di coprire fino a 8 CPU in un computer multiprocessore.
  • Un valore affinity mask da 2 byte consente di coprire fino a 16 CPU in un computer multiprocessore.
  • Un valore affinity mask da 3 byte consente di coprire fino a 24 CPU in un computer multiprocessore.
  • Un valore affinity mask da 4 byte consente di coprire fino a 32 CPU in un computer multiprocessore.
  • Per coprire più di 32 CPU, configurare un valore affinity mask da 4 byte per le prime 32 CPU e un valore affinity64 mask da 4 byte per le CPU rimanenti.

L'impostazione dell'affinità processori di SQL Server è un'operazione estremamente complessa, pertanto è consigliabile eseguirla unicamente se è necessario. Nella maggior parte dei casi, l'affinità predefinita di Microsoft Windows 2000 o Windows Server 2003 offre le migliori prestazioni. Quando si impostano le maschere di affinità, è inoltre consigliabile tenere in considerazione i requisiti delle CPU delle altre applicazioni. Per ulteriori informazioni, consultare la documentazione di Windows.

[!NOTA] Per visualizzare e analizzare l'utilizzo dei singoli processori è possibile utilizzare Monitor di sistema di Windows.

L'opzione affinity mask deve essere utilizzata insieme all'opzione di configurazione affinity I/O mask. Non abilitare la stessa CPU in entrambe le opzioni affinity mask e affinity I/O mask. Lo stato dei bit corrispondenti a ogni CPU deve essere uno dei tre seguenti:

  • 0 in entrambe le opzioni affinity mask e 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.
ms187104.Caution(it-it,SQL.90).gifAttenzione:
Non è consigliabile configurare l'affinità di CPU nel sistema operativo Windows e inoltre configurare la maschera di affinità in SQL Server. Queste impostazioni tentano di ottenere lo stesso risultato e se le configurazioni non sono consistenti, è possibile che si ottengano risultati imprevisti. È consigliabile configurare l'affinità di CPU di SQL Server tramite l'opzione sp_configure di SQL Server.

Esempio

Si supponga di configurare l'opzione affinity mask. Se, ad esempio, i processori 1, 2 e 5 sono selezionati come disponibili tramite l'impostazione dei bit 1, 2 e 5 su 1 e l'impostazione dei bit 0, 3, 4, 6 e 7 su 0, viene specificato il valore esadecimale 0x26 oppure l'equivalente decimale 38. Numerare i bit da destra a sinistra. L'opzione affinity mask inizia a contare i processori da 0 a 31, pertanto nell'esempio seguente il contatore 1 rappresenta il secondo processore nel server.

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

Di seguito sono riportati i valori affinity mask per un sistema con 8 CPU.

Valore decimale Maschera di bit binaria Numeri dei processori in cui vengono eseguiti i thread di SQL Server

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

affinity mask è un'opzione avanzata. Se per modificare l'impostazione si utilizza la stored procedure di sistema sp_configure, sarà possibile modificare affinity mask solo se show advanced options è impostata su 1. Dopo avere eseguito il comando Transact-SQL RECONFIGURE, la nuova impostazione diventa immediatamente attiva senza che sia necessario riavviare l'istanza di SQL Server.

Configurazione NUMA (Non-Uniform Memory Access)

Quando si utilizza hardware basato sulla configurazione NUMA ed è impostata l'opzione affinity mask, verrà creata un'affinità fra tutte le utilità di pianificazione di un nodo e la rispettiva CPU. Quando la maschera di affinità non è impostata, viene creata un'affinità fra le utilità di pianificazione e il gruppo di CPU contenute nel nodo NUMA. Un'utilità di pianificazione mappata al nodo NUMA N1 potrà pianificare operazioni in qualsiasi CPU del nodo, ma non nelle 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 relativi alle licenze

L'affinità dinamica è strettamente correlata alle licenze per le CPU. SQL Server non consente di configurare le opzioni affinity mask in modo da violare i criteri di licenza.

Avvio

Se un'opzione affinity mask specificata viola i criteri di licenza durante l'avvio di SQL Server o durante il collegamento di database, il livello del motore esegue il processo di avvio o l'operazione di collegamento o ripristino del database e quindi reimposta il valore sp_configure eseguito per l'opzione affinity mask su zero, visualizzando un messaggio di errore nel log degli errori di SQL Server.

Riconfigurazione

Se un'opzione affinity mask specificata viola il criterio di licenza durante l'esecuzione del comando Transact-SQL RECONFIGURE, nella sessione client e nel log degli errori di SQL Server verrà visualizzato un messaggio di errore che richiede all'amministratore del database di riconfigurare l'opzione. In questo caso il comando RECONFIGURE WITH OVERRIDE non verrà accettato.

Vedere anche

Concetti

Impostazione delle opzioni di configurazione del server

Altre risorse

Monitoraggio dell'utilizzo delle risorse (Monitor di sistema)
RECONFIGURE (Transact-SQL)
sp_configure (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

5 dicembre 2005

Nuovo contenuto:
  • Aggiunta della sezione relativa a NUMA.