Compartilhar via


Configuração do servidor: affinity mask

Aplica-se: SQL Server

Observação

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez disso, use ALTERAR CONFIGURAÇÃO DO SERVIDOR.

Para realizar multitarefas, o , às vezes, movem threads de processos entre processadores diferentes. Embora seja eficiente de um ponto de vista de sistema operacional, essa atividade pode reduzir o desempenho do SQL Server sob cargas de sistema pesadas, à medida que cada cache do processador é recarregado repetidamente com os dados. Atribuir processadores a threads específicos poderá melhorar o desempenho sob estas condições eliminando recargas de processador; tal associação entre um thread e um processador é chamada de afinidade de processador.

O SQL Server dá suporte à afinidade de processador por meio de duas opções de máscara de afinidade: affinity mask (também conhecida como máscara de afinidade de CPU) e affinity I/O mask. Para obter mais informações sobre affinity I/O mask option, veja Configurar a opção affinity I/O mask de configuração de servidor. O suporte para afinidade de CPU e E/S em servidores com 33 a 64 processadores exige o uso adicional das opções de configuração de servidor affinity64 mask e affinity64 I/O mask, respectivamente.

Observação

O suporte à afinidade para servidores com 33 a 64 processadores só está disponível em sistemas operacionais de 64 bits.

A opção affinity mask, que existia nas versões anteriores do SQL Server, controla dinamicamente a afinidade de CPU.

No SQL Server, a opção affinity mask pode ser configurada sem a necessidade de reiniciar a instância do SQL Server. Ao usar sp_configure,, você deve executar RECONFIGURE ou RECONFIGURE WITH OVERRIDE após definir uma opção de configuração. Quando você estiver usando o SQL Server Express, alterar a opção affinity mask não exigirá uma reinicialização.

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 Server. Isso pode ocorrer enquanto são feitas alterações nas condições do servidor. Por exemplo, se uma nova instância do SQL Server for adicionada ao servidor, talvez seja necessário fazer ajustes na opção affinity mask para redistribuir a carga do processador.

Modificações em bitmasks de afinidade requerem o SQL Server para habilitar um novo agendador de CPU e desabilitar o agendador de CPU existente. Novos lotes podem então ser processados nos agendadores novos ou restantes.

Para iniciar um novo agendador de CPU, o SQL Server cria um agendador e o adiciona à lista de agendadores padrão. O novo agendador só é considerado para os novos lotes de entrada. Os lotes atuais continuam sendo executados no mesmo agendador. Os trabalhadores migram para o agendador novo à medida que ficam livres, ou enquanto os novos trabalhadores são criados.

Desligar um agendador requer que todos os lotes no agendador tenham concluído suas atividades e sejam encerrados. Um agendador que está desligado é marcado como offline, de modo que nenhum lote novo seja agendado nele.

Se um agendador novo for adicionado ou removido, as tarefas permanentes do sistema, como monitor de bloqueio, 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. Essas tarefas permanentes de sistema não são migradas dinamicamente. Para redistribuir a carga de processador para essas tarefas de sistema pelos agendadores, será necessário reinicializar a instância do SQL Server. Se o SQL Server tentar encerrar um agendador associado a uma tarefa permanente de sistema, a tarefa continuará sendo executada no agendador offline (sem migração). Esse agendador é associado aos processadores na máscara de afinidade modificada e não coloca nenhuma carga no processador com o qual estava associado antes da alteração. A presença de agendadores offline adicionais não deve afetar significativamente a carga do sistema. Se afetar, será necessário reiniciar o servidor de banco de dados para reconfigurar essas tarefas nos agendadores disponíveis com a máscara de afinidade modificada.

Não defina os valores de configuração affinity mask e affinity I/O mask do SQL Server para usar as mesmas CPUs. O desempenho pode ser afetado se você optar por associar um processador para o agendamento de threads de trabalho do SQL Server e para o processamento de E/S. É necessário que os valores de configuração não sejam definidos para o mesmo processador. A mesma recomendação se aplica a affinity64 mask e affinity64 I/O mask. Para assegurar que a affinity mask não se sobreponha com affinity I/O mask, o comando RECONFIGURE verifica se as afinidades de CPU e E/S normais são mutuamente exclusivas. Se não forem, uma mensagem de erro será reportada à sessão do cliente e ao log de erros do SQL Server, indicando que essa configuração não é recomendada.

 Msg 5834, Level 16, State 1, Line 1
 The affinity mask specified conflicts with the IO affinity mask specified. Use the override option to force this configuration.

A execução das opções RECONFIGURE WITH OVERRIDE permite que as afinidades de CPU e de E/S não se sobreponham e não sejam mutuamente exclusivas.

As tarefas de afinidade de E/S (como lazy writer e log writer) são afetadas diretamente pela affinity I/O mask. Se as tarefas lazy writer e log writer não tiverem afinidade, elas seguirão as mesmas regras definidas para as outras tarefas permanentes, como lock monitor ou checkpoint.

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 Server. O uso da opção RECONFIGURE WITH OVERRIDE não tem nenhum efeito nesse caso, e o mesmo erro de configuração é relatado novamente.

Você também pode excluir a atividade do SQL Server de atribuições de carga de trabalho específicas pelo sistema operacional Windows. Se você definir um bit representando um processador como 1, esse processador será selecionado pelo Mecanismo de Banco de Dados do SQL Server para atribuição de thread. Quando você define affinity mask como 0 (o padrão), os algoritmos de agendamento do Microsoft Windows definem a afinidade do thread. Quando você define affinity mask como qualquer valor diferente de zero, a afinidade do SQL Server interpreta o valor como um bitmask que especifica esses processadores qualificados para seleção.

Ao isolar threads do SQL Server da execução em determinados processadores, o Microsoft Windows pode avaliar melhor como o sistema está controlando os processos específicos do Windows. Por exemplo, em um servidor de 8 CPUs que executa duas instâncias do SQL Server (instâncias A e B), o administrador do sistema poderia usar a opção affinity mask 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 affinity mask e affinity64 mask. Os valores para affinity mask são os seguintes:

Bytes na máscara Número de CPUs
1 byte Até 8 CPUs
2 bytes Até 16 CPUs
3 bytes Até 24 CPUs
4 bytes Até 32 CPUs

Para incluir mais de 32 CPUs, configure uma affinity mask de 4 bytes para as primeiras 32 CPUs e uma affinity64 mask de 4 bytes para as demais CPUs.

Como a definição da afinidade de processador do SQL Server é uma operação especializada, use-a somente quando necessário. Na maioria dos casos, a afinidade padrão do Windows proporciona o melhor desempenho. Considere os requisitos de CPU para outros aplicativos quando definir as máscaras de afinidade. Para obter mais informações, consulte a documentação do sistema operacional Windows.

Observação

Você pode usar o Monitor de Processos para exibir e analisar o uso individual de processador.

Ao especificar a opção affinity I/O mask, você precisa usá-la com a opção de configuração affinity mask. No entanto, conforme mencionado anteriormente, não habilite a mesma CPU no parâmetro affinity mask e na opção affinity I/O mask. Os bits correspondentes em cada CPU devem estar em um destes três estados:

  • 0 tanto na opção affinity mask quanto na opção affinity I/O mask.
  • 1 na opção affinity mask e 0 na opção affinity I/O mask.
  • 0 na opção affinity mask e 1 na opção affinity I/O mask.

Cuidado

Não configure a afinidade de CPU no sistema operacional Windows e também configure affinity mask no SQL Server. Essas definições estão tentando alcançar o mesmo resultado e se as configurações forem inconsistentes, você pode ter resultados imprevisíveis. A melhor maneira de configurar a afinidade de CPU do SQL Server é com a opção sp_configure no SQL Server.

Exemplos

Como exemplo de configuração da opção affinity mask, se os processadores 1, 2 e 5 forem selecionados como disponíveis com os bits nas posições 1, 2 e 5 definidos como 1 e os bits 0, 3, 4, 6 e 7 definidos como 0, será necessário usar um valor hexadecimal de 0x26 (o decimal equivalente de 38). Numere as posições de bits da direita para a esquerda.

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

A tabela a seguir mostra os valores de affinity mask para um sistema de 8 CPUs.

Valor decimal Máscara de bit binário Permite threads do SQL Server em processadores
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

A opção affinity mask é uma opção avançada. Se você estiver usando o procedimento armazenado do sistema sp_configure para alterar a configuração, é possível alterar affinity mask somente quando show advanced options estiver definido como 1. Após a execução do comando RECONFIGURE do Transact-SQL, a nova configuração terá efeito imediatamente sem a necessidade de reiniciar a instância do SQL Server.

NUMA (acesso não uniforme à memória)

Ao usar hardware baseado em NUMA (acesso não uniforme à memória) e affinity mask estiver definida, cada agendador em um nó será vinculado à própria CPU. Quando affinity mask não estiver definida, cada agendador será vinculado ao 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ó.

Qualquer operação sendo executada em um único nó NUMA só poderá usar páginas de buffer daquele nó. 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.

Problemas de licença

A afinidade dinâmica é restrita com rigor pelo licenciamento de CPU. O SQL Server não permite nenhuma configuração de opções de affinity mask que viole a política de licenciamento.

Inicialização

Se uma máscara de afinidade especificada violar a política de licenciamento durante a inicialização do SQL 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 Server.

Reconfigurar

Se uma máscara de afinidade especificada violar a política de licenciamento ao executar o comando RECONFIGURE do Transact-SQL, uma mensagem de erro será reportada à sessão do cliente e ao log de erros do SQL Server e o administrador do banco de dados precisará reconfigurar a máscara de afinidade. Nenhum comando RECONFIGURE WITH OVERRIDE é aceito neste caso.