Opzione di configurazione del server affinity maskaffinity mask Server Configuration Option

In questo argomento si applica a: SìSQL ServernonDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServernoAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Nota

Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Non usare questa funzionalità in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui è attualmente implementata.Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible. Usare invece ALTER SERVER CONFIGURATION (Transact-SQL). Use ALTER SERVER CONFIGURATION (Transact-SQL) instead.

Per eseguire il multitasking, MicrosoftMicrosoft Windows spostano talvolta thread di processo tra processori diversi.To carry out multitasking, MicrosoftMicrosoft Windows sometimes move process threads among different processors. Sebbene in questo modo venga garantita una maggiore efficienza del sistema operativo, tuttavia questa attività può comportare una riduzione delle prestazioni di SQL ServerSQL Server nel caso di carichi di lavoro elevati, poiché la cache di ogni processore viene ricaricata più volte con dati.Although efficient from an operating system point of view, this activity can reduce SQL ServerSQL Server performance under heavy system loads, as each processor cache is repeatedly reloaded with data. 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.Assigning processors to specific threads can improve performance under these conditions by eliminating processor reloads and reducing thread migration across processors (thereby reducing context switching); such an association between a thread and a processor is called processor affinity.

SQL ServerSQL Server supporta l'affinità processori tramite due opzioni Affinity mask: Affinity mask (nota anche come CPU Affinity mask) e Affinity I/O mask. supports processor affinity by means of two affinity mask options: affinity mask (also known as CPU affinity mask) and affinity I/O mask. Per altre informazioni sull'opzione Affinity I/O mask, vedere Opzione di configurazione del server Affinity Input-Output.For more information on the affinity I/O maskoption, see affinity Input-Output mask Server Configuration Option. Il supporto di CPU e Affinity I/O per server con 33 fino a 64 processori richiede rispettivamente l'uso aggiuntivo dell' opzione di configurazione del server affinity64 mask e dell' opzione di configurazione del server affinity64 Input-Output mask.CPU and I/O affinity support for servers with 33 to 64 processors requires the additional use of the affinity64 mask Server Configuration Option and affinity64 Input-Output mask Server Configuration Option, respectively.

Nota

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.Affinity support for servers with 33 to 64 processors is only available on 64-bit operating systems.

L'opzione affinity mask, disponibile nelle versioni precedenti di SQL ServerSQL Server, controlla in modo dinamico l'affinità di CPU.The affinity mask option, which existed in earlier releases of SQL ServerSQL Server, dynamically controls CPU affinity.

In SQL ServerSQL Serverè possibile configurare l'opzione affinity mask senza che sia necessario riavviare l'istanza di SQL ServerSQL Server.In SQL ServerSQL Server, the affinity mask option can be configured without requiring a restart of the instance of SQL ServerSQL Server. Quando si utilizza sp_configure è necessario eseguire RECONFIGURE oppure RECONFIGURE WITH OVERRIDE dopo aver impostato un'opzione di configurazione.When you are using sp_configure, you must run either RECONFIGURE or RECONFIGURE WITH OVERRIDE after setting a configuration option. Se si utilizza SQL Server ExpressSQL Server Express, la modifica dell'opzione affinity mask non richiede il riavvio.When you are using SQL Server ExpressSQL Server Express, changing the affinity mask option does require a restart.

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 ServerSQL Server.Changes to the affinity masks occur dynamically, allowing for on-demand startup and shutdown of the CPU schedulers that bind process threads within SQL ServerSQL Server. Questa situazione si può verificare quando le condizioni nel server vengono modificate.This can occur as conditions change on the server. Ad esempio, se nel server viene aggiunta una nuova istanza di SQL ServerSQL Server , potrebbe essere necessario modificare l'opzione affinity mask per ridistribuire il carico dei processori.For example, if a new instance of SQL ServerSQL Server is added to the server, it may be necessary to make adjustments to the affinity mask option to redistribute processor load.

Per le modifiche alle maschere di bit di affinità, è necessario che SQL ServerSQL Server abiliti una nuova utilità di pianificazione della CPU e disabiliti quella esistente.Modifications to the affinity bitmasks require SQL ServerSQL Server to enable a new CPU scheduler and disable the existing CPU scheduler. È quindi possibile elaborare nuovi batch nelle nuove utilità di pianificazione o in quelle rimanenti.New batches can then be processed on the new or remaining schedulers.

Per avviare una nuova utilità di pianificazione della CPU, SQL ServerSQL Server crea una nuova utilità di pianificazione e la aggiunge all'elenco di quelle standard.To start a new CPU scheduler, SQL ServerSQL Server creates a new scheduler and adds it to the list of its standard schedulers. La nuova utilità di pianificazione viene presa in considerazione unicamente per i nuovi batch in entrata.The new scheduler is considered only for the new incoming batches. L'esecuzione dei batch correnti continua nella stessa utilità di pianificazione.Current batches continue to run on the same scheduler. I thread di lavoro migrano alla nuova utilità di pianificazione man mano che si liberano o che ne vengono creati di nuovi.The workers migrate to the new scheduler as they free up, or as new workers are created.

Per chiudere un'utilità di pianificazione, è necessario che tutti i batch nell'utilità abbiano completato le relative attività e interrompano l'esecuzione.Shutting down a scheduler requires all batches on the scheduler to complete their activities and exit. Un'utilità di pianificazione che è stata chiusa viene contrassegnata come offline, in modo che non venga pianificato alcun nuovo batch su di essa.A scheduler that has been shut down is marked as offline so that no new batch is scheduled on it.

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.Whether a new scheduler is added or removed, the permanent system tasks such as lockmonitor, checkpoint, system task thread (processing DTC), and signal process continue to run on the scheduler while the server is operational. Queste attività di sistema permanenti non eseguono la migrazione in modo dinamico.These permanent system tasks do not dynamically migrate. Per ridistribuire il carico del processore di queste attività nelle utilità di pianificazione, è necessario riavviare l'istanza di SQL ServerSQL Server .To redistribute processor load for these system tasks across schedulers, it is necessary to restart the SQL ServerSQL Server instance. Se SQL ServerSQL 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).If SQL ServerSQL Server attempts to shut down a scheduler associated with a permanent system task, the task continues to run on the offline scheduler (no migration). 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.This scheduler is bound to the processors in the modified affinity mask and should not put any load on the processor it was affinitized with before the change. La presenza di utilità di pianificazione offline aggiuntive non dovrebbe influire in modo significativo sul carico del sistema.Having extra offline schedulers, should not significantly affect the load of the system. In caso contrario, per riconfigurare queste attività è necessario riavviare il server di database.If this is not the case, a database server reboot is required to reconfigure these tasks.

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.The I/O affinity tasks (such as lazywriter and logwriter) are directly affected by the I/O affinity mask. 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.If the lazywriter and logwriter tasks are not affinitized, they follow the same rules defined for the other permanent tasks such as lockmonitor or 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.To ensure that the new affinity mask is valid, the RECONFIGURE command verifies that the normal CPU and I/O affinities are mutually exclusive. In caso contrario, nella sessione del client e nel log degli errori di SQL ServerSQL Server viene visualizzato un messaggio di errore che indica che l'impostazione non è corretta.If this is not the case, an error message is reported to the client session and to the SQL ServerSQL Server error log, indicating that such a setting is not recommended. Per consentire affinità di CPU e di I/O che non si escludono a vicenda, è possibile eseguire le opzioni RECONFIGURE WITH OVERRIDE.Running RECONFIGURE WITH OVERRIDE options allows CPU and I/O affinities that are not mutually exclusive.

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 ServerSQL Server .If you specify an affinity mask that attempts to map to a nonexistent CPU, the RECONFIGURE command reports an error message to both the client session and the SQL ServerSQL Server error log. In questo caso, l'utilizzo dell'opzione RECONFIGURE WITH OVERRIDE non avrà alcun effetto e verrà visualizzato di nuovo lo stesso errore di configurazione.Using the RECONFIGURE WITH OVERRIDE option has no effect in this case, and the same configuration error is reported again.

È inoltre possibile escludere l'attività di SQL ServerSQL Server da processori ai quali sono stati assegnati carichi di lavoro specifici nei sistemi operativi Windows 2000 o Windows Server 2003.You can also exclude SQL ServerSQL Server activity from processors assigned specific workload assignments by the Windows 2000 or Windows Server 2003 operating system. Se si imposta su 1 un bit corrispondente a un processore, il processore viene selezionato dal Motore di database di SQL ServerSQL Server per l'assegnazione di thread.If you set a bit representing a processor to 1, that processor is selected by the SQL ServerSQL Server Database Engine for thread assignment. 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.When you set affinity mask to 0 (the default), the Microsoft Windows 2000 or Windows Server 2003 scheduling algorithms set the thread's affinity. Se l'opzione della maschera di affinità viene impostata su un valore diverso da zero, l'affinità di SQL ServerSQL Server interpreta il valore come maschera di bit che indica che i processori sono selezionabili.When you set affinity mask to any nonzero value, SQL ServerSQL Server affinity interprets the value as a bitmask that specifies those processors eligible for selection.

L'esclusione dei thread SQL ServerSQL Server da processori specifici consente a Microsoft Windows 2000 o Windows Server 2003 di valutare adeguatamente la gestione dei processi specifici di Windows.By segregating SQL ServerSQL Server threads from running on particular processors, Microsoft Windows 2000 or Windows Server 2003 can better evaluate the system's handling of processes specific to Windows. Ad esempio, per un server con 8 CPU nel quale sono in esecuzione due istanze di SQL ServerSQL Server (istanza A e B), l'amministratore di sistema può utilizzare l'opzione affinity mask per assegnare il primo set di 4 CPU all'istanza A e il secondo set di 4 CPU all'istanza B. Per configurare più di 32 processori, impostare entrambe le opzioni affinity mask e affinity64 mask.For example, on an 8-CPU server running two instances of SQL ServerSQL Server (instance A and B), the system administrator could use the affinity mask option to assign the first set of 4 CPUs to instance A and the second set of 4 to instance B. To configure more than 32 processors, set both the affinity mask and the affinity64 mask. I valori della maschera di affinità sono i seguenti:The values for affinity mask are as follows:

  • Un' affinity mask da un byte copre fino a 8 CPU in un computer multiprocessore.A one-byte affinity mask covers up to 8 CPUs in a multiprocessor computer.

  • Un' affinity mask da due byte copre fino a 16 CPU in un computer multiprocessore.A two-byte affinity mask covers up to 16 CPUs in a multiprocessor computer.

  • Un' affinity mask da tre byte copre fino a 24 CPU in un computer multiprocessore.A three-byte affinity mask covers up to 24 CPUs in a multiprocessor computer.

  • Un' affinity mask da quattro byte copre fino a 32 CPU in un computer multiprocessore.A four-byte affinity mask covers up to 32 CPUs in a multiprocessor computer.

  • 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.To cover more than 32 CPUs, configure a four-byte affinity mask for the first 32 CPUs and up to a four-byte affinity64 mask for the remaining CPUs.

    L'impostazione dell'affinità processori di SQL ServerSQL Server è un'operazione estremamente complessa, pertanto è consigliabile eseguirla unicamente se è necessario.Because setting SQL ServerSQL Server processor affinity is a specialized operation, it is recommended that it be used only when necessary. Nella maggior parte dei casi, l'affinità predefinita di Microsoft Windows 2000 o Windows Server 2003 offre le migliori prestazioni.In most cases, the Microsoft Windows 2000 or Windows Server 2003 default affinity provides the best performance. Quando si impostano le maschere di affinità, è inoltre consigliabile tenere in considerazione i requisiti delle CPU delle altre applicazioni.You should also consider the CPU requirements for other applications when setting the affinity masks. Per ulteriori informazioni, consultare la documentazione di Windows.For more information, see your Windows operating system documentation.

Nota

Per visualizzare e analizzare l'utilizzo dei singoli processori, è possibile utilizzare Monitor di sistema di Windows.You can use the Windows System Monitor to view and analyze individual processor usage.

Quando si specifica l'opzione affinity I/O mask, essa deve essere utilizzata insieme all'opzione di configurazione affinity mask.When specifying the affinity I/O mask option, you must use it in connection with the affinity mask configuration option. Non abilitare la stessa CPU nell'opzione affinity mask e in affinity I/O mask.Do not enable the same CPU in both the affinity mask switch and the affinity I/O mask option. Lo stato dei bit corrispondenti a ogni CPU deve essere uno dei tre seguenti:The bits corresponding to each CPU should be in one of these three states:

  • 0 in entrambe le opzioni affinity mask e affinity I/O mask.0 in both the affinity mask option and the affinity I/O mask option.

  • 1 nell'opzione affinity mask e 0 nell'opzione affinity I/O mask.1 in the affinity mask option and 0 in the affinity I/O mask option.

  • 0 nell'opzione affinity mask e 1 nell'opzione affinity I/O mask.0 in the affinity mask option and 1 in the affinity I/O mask option.

Attenzione

Non configurare l'affinità di CPU nel sistema operativo Windows e contemporaneamente l'opzione affinity mask in SQL ServerSQL Server.Do not configure CPU affinity in the Windows operating system and also configure the affinity mask in SQL ServerSQL Server. Le due impostazioni mirano a ottenere lo stesso risultato e, se le configurazioni sono incoerenti, potrebbero causare risultati imprevisti.These settings are attempting to achieve the same result, and if the configurations are inconsistent, you may have unpredictable results. SQL ServerSQL Server La configurazione ottimale dell'affinità di CPU in SQL ServerSQL Serverpuò essere ottenuta usando l'opzione sp_configure. CPU affinity is best configured using the sp_configure option in SQL ServerSQL Server.

EsempioExample

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 .As an example of setting the affinity mask option, if processors 1, 2, and 5 are selected as available with bits 1, 2, and 5 set to 1 and bits 0, 3, 4, 6, and 7 set to 0, a hexadecimal value of 0x26 or the decimal equivalent of 38 is specified. Numerare i bit da destra a sinistra.Number the bits from right to left. L'opzione affinity mask inizia a contare i processori da 0 a 31. Nell'esempio seguente il contatore 1 rappresenta il secondo processore nel server.The affinity mask option starts counting processors from 0 to 31, so that in the following example the counter 1 represents the second processor on the server.

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

Di seguito sono riportati i valori dell' affinity mask per un sistema con 8 CPU.These are affinity mask values for an 8-CPU system.

Valore decimaleDecimal value Maschera di bit binariaBinary bit mask Numeri dei processori in cui vengono eseguiti i thread di SQL ServerAllow SQL Server threads on processors
11 0000000100000001 00
33 0000001100000011 0 e 10 and 1
77 0000011100000111 0, 1 e 20, 1, and 2
1515 0000111100001111 0, 1, 2 e 30, 1, 2, and 3
3131 0001111100011111 0, 1, 2, 3 e 40, 1, 2, 3, and 4
6363 0011111100111111 0, 1, 2, 3, 4 e 50, 1, 2, 3, 4, and 5
127127 0111111101111111 0, 1, 2, 3, 4, 5 e 60, 1, 2, 3, 4, 5, and 6
255255 1111111111111111 0, 1, 2, 3, 4, 5, 6 e 70, 1, 2, 3, 4, 5, 6, and 7

affinity mask è un'opzione avanzata.The affinity mask option is an advanced option. Se si usa la stored procedure di sistema sp_configure per modificare l'impostazione, è possibile modificare l' affinity mask solo quando il valore di Show Advanced Options è impostato su 1.If you are using the sp_configure system stored procedure to change the setting, you can change affinity mask only when show advanced options is set to 1. Dopo aver eseguito il comando Transact-SQLTransact-SQL RECONFIGURE, la nuova impostazione viene applicata immediatamente senza che sia necessario riavviare l'istanza di SQL ServerSQL Server .After executing the Transact-SQLTransact-SQL RECONFIGURE command, the new setting takes effect immediately without requiring a restart of the SQL ServerSQL Server instance.

Configurazione NUMA (Non-Uniform Memory Access)Non-uniform Memory Access (NUMA)

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.When using hardware based non-uniform memory access (NUMA) and the affinity mask is set, every scheduler in a node will be affinitized to its own CPU. Quando l'opzione affinity mask non è impostata, viene creata un'affinità tra le utilità di pianificazione e il gruppo di CPU contenute nel nodo NUMA. Un'utilità di pianificazione di cui viene eseguito il mapping al nodo NUMA N1 potrà pianificare operazioni in qualsiasi CPU del nodo, ma non nelle CPU associate a un altro nodo.When the affinity mask is not set, each scheduler is affinitized to the group of CPUs within the NUMA node and a scheduler mapped to NUMA node N1 can schedule work on any CPU in the node, but not on CPUs associated with another node.

Le operazioni eseguite in un solo nodo NUMA possono utilizzare solo pagine del buffer di tale nodo.Any operation running on a single NUMA node can only use buffer pages from that node. Quando un'operazione viene eseguita in parallelo sulle CPU di più nodi, è possibile utilizzare la memoria di tutti i nodi coinvolti.When an operation is run in parallel on CPUs from multiple nodes, memory can be used from any node involved.

Problemi relativi alle licenzeLicensing Issues

L'affinità dinamica è strettamente correlata alle licenze per le CPU.Dynamic affinity is tightly constrained by CPU licensing. SQL ServerSQL Server non consente di configurare le opzioni affinity mask in modo da violare i criteri di licenza. does not allow any configuration of affinity mask options that violates the licensing policy.

AvvioStartup

Se un'opzione affinity mask specificata viola i criteri di licenza durante l'avvio di SQL ServerSQL Server o durante il collegamento di database, il livello del motore completerà il processo di avvio o l'operazione di collegamento o ripristino del database e successivamente reimposterà il valore di esecuzione di sp_configure per l'opzione affinity mask su zero, visualizzando un messaggio di errore nel log degli errori di SQL ServerSQL Server .If a specified affinity mask violates the licensing policy during SQL ServerSQL Server startup or during database attach, the engine layer will complete the startup process or database attach/restore operation, and then it will reset the sp_configure run value for the affinity mask to zero, issuing an error message to the SQL ServerSQL Server error log.

RiconfigurazioneReconfigure

Se un'opzione affinity mask specificata viola i criteri di licenza durante l'esecuzione del comando Transact-SQLTransact-SQL RECONFIGURE, nella sessione client e nel log degli errori di SQL ServerSQL Server verrà visualizzato un messaggio di errore che richiede all'amministratore del database di riconfigurare l'opzione.If a specified affinity mask violates the licensing policy when running Transact-SQLTransact-SQL RECONFIGURE command, an error message is reported to the client session and to the SQL ServerSQL Server error log, requiring the database administrator to reconfigure the affinity mask. In questo caso il comando RECONFIGURE WITH OVERRIDE non verrà accettato.No RECONFIGURE WITH OVERRIDE command is accepted in this case.

Vedere ancheSee Also

Monitorare l'utilizzo delle risorse (Monitor di sistema) Monitor Resource Usage (System Monitor)
RECONFIGURE (Transact-SQL) RECONFIGURE (Transact-SQL)
Opzioni di configurazione del server (SQL Server) Server Configuration Options (SQL Server)
sp_configure (Transact-SQL) sp_configure (Transact-SQL)
ALTER SERVER CONFIGURATION (Transact-SQL)ALTER SERVER CONFIGURATION (Transact-SQL)