Opção affinity mask de configuração de servidoraffinity mask Server Configuration Option

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Observação

Esse recurso será removido em uma versão futura do Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Não utilize esse recurso em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o utilizam.Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible. Em vez disso, use ALTER SERVER CONFIGURATION (Transact-SQL).Use ALTER SERVER CONFIGURATION (Transact-SQL) instead.

Para realizar multitarefas, o MicrosoftMicrosoft , às vezes, movem threads de processos entre processadores diferentes.To carry out multitasking, MicrosoftMicrosoft Windows sometimes move process threads among different processors. Embora eficiente de um ponto de vista de sistema operacional, essa atividade pode reduzir o desempenho do SQL ServerSQL Server sob cargas de sistema pesadas, à medida que cada cache de processador é recarregado repetidamente com dados.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. Atribuir processadores a threads específicos poderá melhorar o desempenho nessas condições eliminando recargas de processador e reduzindo a migração de thread entre processadores (reduzindo portanto a alternância de contexto); tal associação entre um thread e um processador é chamada de afinidade do processador.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 dá suporte à afinidade de processador por meio de duas opções de máscara de afinidade: máscara de afinidade (também conhecida como máscara de afinidade de CPU) e máscara de E/S de afinidade.supports processor affinity by means of two affinity mask options: affinity mask (also known as CPU affinity mask) and affinity I/O mask. Para obter mais informações sobre a opção de máscara de opção de E/S de afinidade, veja Opção de configuração de servidor de máscara de entrada/saída de afinidade.For more information on the affinity I/O maskoption, see affinity Input-Output mask Server Configuration Option. O suporte para afinidade de CPU e E/S em servidores com 33 a 64 processadores exige o uso adicional da Opção de configuração de servidor de máscara affinity64 e Opção de configuração de servidor de máscara de entrada/saída affinity64, respectivamente.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.

Observação

O suporte à afinidade para servidores com 33 a 64 processadores só está disponível em sistemas operacionais de 64 bits.Affinity support for servers with 33 to 64 processors is only available on 64-bit operating systems.

A opção de máscara de afinidade, que existia nas versões anteriores do SQL ServerSQL Server, controla dinamicamente a afinidade de CPU.The affinity mask option, which existed in earlier releases of SQL ServerSQL Server, dynamically controls CPU affinity.

No SQL ServerSQL Server, a opção de máscara de afinidade pode ser configurada sem a necessidade de reiniciar a instância do 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. Ao usar sp_configure, você deve executar RECONFIGURE ou RECONFIGURE WITH OVERRIDE depois de definir uma opção de configuração.When you are using sp_configure, you must run either RECONFIGURE or RECONFIGURE WITH OVERRIDE after setting a configuration option. Quando você estiver usando o SQL Server ExpressSQL Server Express, e a opção de máscara de afinidade for alterada, isso não exigirá uma reinicialização.When you are using SQL Server ExpressSQL Server Express, changing the affinity mask option does require a restart.

As alterações nas máscaras de afinidade ocorrem dinamicamente, permitindo a inicialização e o encerramento sob demanda dos agendadores de CPU que associam threads de processo ao 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. Isso pode ocorrer enquanto são feitas alterações nas condições do servidor.This can occur as conditions change on the server. Por exemplo, se uma instância nova do SQL ServerSQL Server for adicionada ao servidor, talvez seja necessário fazer ajustes na opção de máscara de afinidade para redistribuição da carga do processador.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.

Modificações em bitmasks de afinidade requerem o SQL ServerSQL Server para habilitar um novo agendador de CPU e desabilitar o agendador de CPU existente.Modifications to the affinity bitmasks require SQL ServerSQL Server to enable a new CPU scheduler and disable the existing CPU scheduler. Novos lotes podem então ser processados nos agendadores novos ou restantes.New batches can then be processed on the new or remaining schedulers.

Para iniciar um novo agendador de CPU, o SQL ServerSQL Server cria um novo agendador e o adiciona à lista de agendadores padrão.To start a new CPU scheduler, SQL ServerSQL Server creates a new scheduler and adds it to the list of its standard schedulers. O novo agendador só é considerado para os novos lotes de entrada.The new scheduler is considered only for the new incoming batches. Os lotes atuais continuam sendo executados no mesmo agendador.Current batches continue to run on the same scheduler. Os trabalhadores migram para o agendador novo à medida que ficam livres, ou enquanto os novos trabalhadores são criados.The workers migrate to the new scheduler as they free up, or as new workers are created.

Desligar um agendador requer que todos os lotes no agendador tenham concluído suas atividades e sejam encerrados.Shutting down a scheduler requires all batches on the scheduler to complete their activities and exit. Um agendador que foi encerrado é marcado como offline, de forma que nenhum lote novo seja agendado nele.A scheduler that has been shut down is marked as offline so that no new batch is scheduled on it.

Se um agendador novo for adicionado ou removido, as tarefas permanentes do sistema, como lockmonitor, ponto de verificação, thread de tarefa de sistema (processando DTC) e processo de sinal continuarão sendo executadas no agendador enquanto o servidor estiver em operação.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. Essas tarefas permanentes de sistema não são migradas dinamicamente.These permanent system tasks do not dynamically migrate. Para redistribuir a carga de processador para essas tarefas de sistema pelos agendadores, será necessário reinicializar a instância do SQL ServerSQL Server .To redistribute processor load for these system tasks across schedulers, it is necessary to restart the SQL ServerSQL Server instance. Se o SQL ServerSQL Server tentar encerrar um agendador associado a uma tarefa permanente de sistema, a tarefa continuará sendo executada no agendador offline (sem migração).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). Esse agendador é associado aos processadores na máscara de afinidade modificada e não deverá colocar nenhuma carga no processador com o qual tinha afinidade antes da alteração.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. A presença de agendadores offline adicionais não deve afetar de forma significativa a carga do sistema.Having extra offline schedulers, should not significantly affect the load of the system. Se isso não acontecer, o servidor de banco de dados deverá ser reinicializado para reconfigurar essas tarefas.If this is not the case, a database server reboot is required to reconfigure these tasks.

As tarefas de afinidade de E/S (como lazywriter e logwriter) são afetadas diretamente pela máscara de afinidade de E/S.The I/O affinity tasks (such as lazywriter and logwriter) are directly affected by the I/O affinity mask. Se as tarefas lazywriter e logwriter não tiverem afinidade, elas seguirão as mesmas regras definidas para as outras tarefas permanentes, como lockmonitor ou ponto de verificação.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.

Para assegurar que a nova máscara de afinidade seja válida, o comando RECONFIGURE verifica se as afinidades de CPU e E/S normais são mutuamente exclusivas.To ensure that the new affinity mask is valid, the RECONFIGURE command verifies that the normal CPU and I/O affinities are mutually exclusive. Se esse não for o caso, uma mensagem de erro será reportada à sessão do cliente e ao log de erros do SQL ServerSQL Server , indicando que essa configuração não é recomendada.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. A execução das opções RECONFIGURE WITH OVERRIDE permite afinidades de CPU e E/S que não sejam mutuamente exclusivas.Running RECONFIGURE WITH OVERRIDE options allows CPU and I/O affinities that are not mutually exclusive.

Se você especificar uma máscara de afinidade que tenta fazer mapeamento para uma CPU inexistente, o comando RECONFIGURE reportará uma mensagem de erro à sessão do cliente e ao log de erros do 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. O uso da opção RECONFIGURE WITH OVERRIDE não tem nenhum efeito nesse caso, e o mesmo erro de configuração é reportado novamente.Using the RECONFIGURE WITH OVERRIDE option has no effect in this case, and the same configuration error is reported again.

Você também pode excluir atividade do SQL ServerSQL Server de processadores com atribuições de carga de trabalho específicas aos sistemas operacionais Windows 2000 ou 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 você definir um bit representando um processador como 1, esse processador será selecionado pelo Mecanismo de Banco de Dados do SQL ServerSQL Server para atribuição de 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. Quando você define a máscara de afinidade como 0 (o padrão), os algoritmos de agendamento do Microsoft Windows 2000 ou do Windows Server 2003 definem a afinidade do thread.When you set affinity mask to 0 (the default), the Microsoft Windows 2000 or Windows Server 2003 scheduling algorithms set the thread's affinity. Quando você define a máscara de afinidade como qualquer valor diferente de zero, a afinidade do SQL ServerSQL Server interpreta o valor como um bitmask que especifica esses processadores qualificados para seleção.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.

Ao isolar threads do SQL ServerSQL Server da execução em determinados processadores, o Microsoft Windows 2000 ou o Windows Server 2003 pode avaliar melhor como o sistema está controlando os processos específicos do 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. Por exemplo, em um servidor de 8 CPUs que executa duas instâncias do SQL ServerSQL Server (instâncias A e B), o administrador do sistema poderia usar a opção de máscara de afinidade para atribuir o primeiro conjunto de 4 CPUs à instância A e o segundo conjunto de 4 CPUs à instância B. Para configurar mais de 32 processadores, defina a máscara de afinidade e a máscara de afinidade64.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. Os valores para máscara de afinidade são os seguintes:The values for affinity mask are as follows:

  • Uma máscara de afinidade de um byte abrange até oito CPUs em um computador multiprocessador.A one-byte affinity mask covers up to 8 CPUs in a multiprocessor computer.

  • Uma máscara de afinidade de dois bytes abrange até 16 CPUs em um computador multiprocessador.A two-byte affinity mask covers up to 16 CPUs in a multiprocessor computer.

  • Uma máscara de afinidade de três bytes abrange até 24 CPUs em um computador multiprocessador.A three-byte affinity mask covers up to 24 CPUs in a multiprocessor computer.

  • Uma máscara de afinidade de quatro bytes abrange até 32 CPUs em um computador multiprocessador.A four-byte affinity mask covers up to 32 CPUs in a multiprocessor computer.

  • Para incluir mais de 32 CPUs, configure uma máscara de afinidade de 4 bytes para as primeiras 32 CPUs e uma máscara de afinidade64 de quatro bytes para as demais CPUs.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.

Como definir a opção de afinidade de processador do SQL ServerSQL Server é uma operação especializada, recomenda-se que ela só seja usada quando necessário.Because setting SQL ServerSQL Server processor affinity is a specialized operation, it is recommended that it be used only when necessary. Na maioria dos casos, a afinidade padrão do Microsoft Windows 2000 ou Windows Server 2003 proporciona o melhor desempenho.In most cases, the Microsoft Windows 2000 or Windows Server 2003 default affinity provides the best performance. Você também deve considerar os requisitos de CPU para outros aplicativos quando definir as máscaras de afinidade.You should also consider the CPU requirements for other applications when setting the affinity masks. Para obter mais informações, consulte a documentação do sistema operacional Windows.For more information, see your Windows operating system documentation.

Observação

Você pode usar o Windows System Monitor para exibir e analisar o uso individual de processador.You can use the Windows System Monitor to view and analyze individual processor usage.

Ao especificar a opção de máscara de afinidade de E/S, você deverá usá-la em conjunto com a opção de configuração de máscara de afinidade.When specifying the affinity I/O mask option, you must use it in connection with the affinity mask configuration option. Não habilite a mesma CPU na opção máscara de afinidade e na opção máscara de E/S de afinidade.Do not enable the same CPU in both the affinity mask switch and the affinity I/O mask option. Os bits correspondentes em cada CPU devem estar em um destes três estados:The bits corresponding to each CPU should be in one of these three states:

  • 0 na opção de máscara de afinidade e na opção de máscara de afinidade de E/S.0 in both the affinity mask option and the affinity I/O mask option.

  • 1 na opção de máscara de afinidade e 0 na opção de máscara de E/S de afinidade.1 in the affinity mask option and 0 in the affinity I/O mask option.

  • 0 na opção de máscara de afinidade e 1 na opção de máscara de E/S de afinidade.0 in the affinity mask option and 1 in the affinity I/O mask option.

Cuidado

Não configure afinidade de CPU no sistema operacional Windows e também configure a máscara de afinidade em SQL ServerSQL Server.Do not configure CPU affinity in the Windows operating system and also configure the affinity mask in SQL ServerSQL Server. Essas definições estão tentando alcançar o mesmo resultado e se as configurações forem inconsistentes, você poderá ter resultados imprevisíveis.These settings are attempting to achieve the same result, and if the configurations are inconsistent, you may have unpredictable results. SQL ServerSQL Server Você poderá configurar melhor a afinidade de CPU no SQL ServerSQL Servercom a opção sp_configure.CPU affinity is best configured using the sp_configure option in SQL ServerSQL Server.

ExemploExample

Como exemplo de configuração da opção de máscara de afinidade, se os processadores 1, 2 e 5 forem selecionados como disponíveis com os bits 1, 2 e 5 definidos como 1 e os bits 0, 3, 4, 6 e 7 definidos como 0, um valor hexadecimal de 0x26 ou o decimal equivalente de 38 será especificado.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. Numere os bits da direita para a esquerda.Number the bits from right to left. A opção de máscara de afinidade inicia a contagem de processadores de 0 a 31, de forma que no exemplo a seguir o contador 1 represente o segundo processador no servidor.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  

Esses são valores de máscara de afinidade para um sistema com oito CPUs.These are affinity mask values for an 8-CPU system.

Valor decimalDecimal value Máscara de bit binárioBinary bit mask Permite threads do SQL Server em processadoresAllow 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

A opção de máscara de afinidade é uma opção avançada.The affinity mask option is an advanced option. Se você estiver usando o procedimento armazenado no sistema sp_configure para alterar a configuração, será possível alterar a máscara de afinidade apenas quando mostrar opções avançadas estiver definido como 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. Após executar o comando RECONFIGURE de Transact-SQLTransact-SQL , a nova configuração terá efeito imediatamente sem a necessidade de reiniciar a instância do 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.

Acesso de memória não uniforme (NUMA)Non-uniform Memory Access (NUMA)

Ao usar hardware baseado em NUMA com a máscara de afinidade definida, todo agendador em um nó terá uma afinidade com sua própria 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 a máscara de afinidade não estiver definida, cada agendador terá uma afinidade com o grupo de CPUs dentro do nó NUMA e um agendador mapeado para o nó NUMA N1 poderá agendar trabalho em qualquer CPU no nó, mas não em CPUs associadas a outro nó.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.

Qualquer operação sendo executada em um único nó NUMA só poderá usar páginas de buffer daquele nó.Any operation running on a single NUMA node can only use buffer pages from that node. Quando uma operação é executada paralelamente nas CPUs a partir de vários nós, a memória poderá ser usada a partir de qualquer nó envolvido.When an operation is run in parallel on CPUs from multiple nodes, memory can be used from any node involved.

Problemas de licenciamentoLicensing Issues

A afinidade dinâmica é restrita com rigor pelo licenciamento de CPU.Dynamic affinity is tightly constrained by CPU licensing. SQL ServerSQL Server não permite nenhuma configuração de opções de máscara de afinidade que viole a política de licenciamento.does not allow any configuration of affinity mask options that violates the licensing policy.

InicializaçãoStartup

Se uma máscara de afinidade especificada violar a política de licenciamento durante a inicialização do SQL ServerSQL Server ou durante a anexação do banco de dados, a camada do mecanismo concluirá o processo de inicialização ou a operação de anexação/restauração do banco de dados e depois redefinirá o valor de execução de sp_configure da máscara de afinidade como zero, emitindo uma mensagem de erro para o log de erros do 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.

ReconfiguraçãoReconfigure

Se uma máscara de afinidade especificada violar a política de licenciamento ao executar o comando RECONFIGURE de Transact-SQLTransact-SQL , uma mensagem de erro será reportada à sessão do cliente e ao log de erros do SQL ServerSQL Server e o administrador do banco de dados terá que reconfigurar a máscara de afinidade.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. Nenhum comando RECONFIGURE WITH OVERRIDE é aceito nesse caso.No RECONFIGURE WITH OVERRIDE command is accepted in this case.

Consulte TambémSee Also

Monitorar o uso de recursos (Monitor do Sistema) Monitor Resource Usage (System Monitor)
RECONFIGURE (Transact-SQL) RECONFIGURE (Transact-SQL)
Opções de configuração do servidor (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)