Compartilhar via


Opção de configuração do servidor de máscara de afinidade

Observação

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Não use esse recurso em um novo trabalho de desenvolvimento e modifique os aplicativos que atualmente usam esse recurso o mais rápido possível. Em vez disso, use ALTER SERVER CONFIGURATION (Transact-SQL).

Para realizar multitarefa, o Microsoft Windows às vezes move threads de processo 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 pode melhorar o desempenho nessas condições eliminando recarregamentos de processador e reduzindo a migração de thread entre processadores (reduzindo assim a alternância de contexto); essa 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: máscara de afinidade (também conhecida como máscara de afinidade de CPU) e máscara de E/S de afinidade. Para obter mais informações sobre a opção de máscara de I/O de afinidade, consulte opção de configuração de máscara de afinidade Input-Output. O suporte à afinidade de CPU e E/S para servidores com 33 a 64 processadores requer o uso adicional da opção de configuração do servidor affinity64 mask e da opção de configuração do servidor affinity64 Input-Output 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 de máscara de afinidade, que existia em versões anteriores do SQL Server, controla dinamicamente a afinidade da CPU.

No SQL Server, a opção de máscara de afinidade pode ser configurada sem exigir uma reinicialização da instância do SQL Server. Ao usar sp_configure, você deve executar RECONFIGURE ou RECONFIGURAR WITH OVERRIDE depois de definir uma opção de configuração. Quando você estiver usando o SQL Server Express, alterar a opção de máscara de afinidade 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 de máscara de afinidade 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 foi desligado é marcado como offline para que nenhum novo lote seja agendado nele.

Se um novo agendador for adicionado ou removido, as tarefas permanentes do sistema, como monitor de bloqueio, verificação de ponto, thread de tarefa do sistema (processamento de DTC) e processo de sinal, continuam a ser executadas no agendador enquanto o servidor estiver operacional. Essas tarefas permanentes do sistema não são migradas dinamicamente. Para redistribuir a carga do processador para essas tarefas do sistema entre agendadores, é necessário reiniciar 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 está vinculado aos processadores na máscara de afinidade modificada e não deve colocar qualquer carga no processador com o qual era afinizado antes da alteração. Ter agendadores offline extras não deve afetar significativamente a carga do sistema. Se esse não for o caso, uma reinicialização do servidor de banco de dados será necessária para reconfigurar essas tarefas.

As tarefas de afinidade de E/S (como lazywriter e logwriter) são diretamente afetadas pela máscara de afinidade de E/S. Se as tarefas lazywriter e logwriter não forem dedicadas, elas seguirão as mesmas regras definidas para outras tarefas permanentes, como lockmonitor ou checkpoint.

Para garantir que a nova máscara de afinidade seja válida, o comando RECONFIGURE verifica se as afinidades normais de CPU e E/S são mutuamente exclusivas. Se esse não for o caso, uma mensagem de erro será relatada à sessão do cliente e ao log de erros do SQL Server, indicando que essa configuração não é recomendada. A execução das opções RECONFIGURE WITH OVERRIDE permite afinidades de CPU e E/S que não são mutuamente exclusivas.

Se você especificar uma máscara de afinidade que tenta mapear para uma CPU inexistente, o comando RECONFIGURE reportará uma mensagem de erro para a sessão do cliente e o log de erros do SQL Server. O uso da opção RECONFIGURE WITH OVERRIDE não tem efeito nesse caso e o mesmo erro de configuração é relatado novamente.

Você também pode excluir a atividade do SQL Server de processadores atribuídos a atribuições de carga de trabalho específicas pelo sistema operacional Windows 2000 ou Windows Server 2003. 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 2000 ou Windows Server 2003 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 separar threads do SQL Server de serem executados em processadores específicos, o Microsoft Windows 2000 ou o Windows Server 2003 podem avaliar melhor o tratamento do sistema de processos específicos ao Windows. Por exemplo, em um servidor de 8 CPU executando duas instâncias do SQL Server (instância 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 à instância B. Para configurar mais de 32 processadores, defina a máscara de afinidade e a máscara affinity64. Os valores para affinity mask são os seguintes:

  • Um byte affinity mask abrange até 8 CPUs em um computador multiprocessador.

  • Um byte de dois bytes affinity mask abrange até 16 CPUs em um computador multiprocessador.

  • Um affinity mask de três bytes abrange até 24 CPUs em um computador multiprocessador.

  • Um byte de quatro bytes affinity mask abrange até 32 CPUs em um computador multiprocessador.

  • Para cobrir mais de 32 CPUs, configure uma máscara de afinidade de quatro bytes para as primeiras 32 CPUs e até uma máscara de afinidade de quatro bytes64 para as CPUs restantes.

Como definir a afinidade do processador do SQL Server é uma operação especializada, é recomendável que ela seja usada somente quando necessário. Na maioria dos casos, a afinidade padrão do Microsoft Windows 2000 ou do Windows Server 2003 fornece o melhor desempenho. Você também deve considerar os requisitos de CPU para outros aplicativos ao 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 Windows System Monitor para exibir e analisar o uso individual do processador.

Ao especificar a opção de máscara de E/S de afinidade, você deve usá-la em conexão com a opção de configuração de máscara de afinidade. Não habilite a mesma CPU tanto no switch affinity mask quanto na opção de máscara de E/S de afinidade. Os bits correspondentes em cada CPU devem estar em um destes três estados:

  • 0 na opção de máscara de afinidade e na opção de máscara de entrada/saída de afinidade.

  • 1 na opção de máscara de afinidade e 0 na opção de máscara de E/S de afinidade.

  • 0 na opção de máscara de afinidade e 1 na opção de máscara de E/S de afinidade.

Cuidado

Não configure a afinidade de CPU no sistema operacional Windows, e também não configure a máscara de afinidade no SQL Server. Essas configurações estão tentando obter o mesmo resultado e, se as configurações forem inconsistentes, você poderá ter resultados imprevisíveis. A afinidade de CPU do SQL Server é melhor configurada usando a opção sp_configure no SQL Server.

Exemplo

Como exemplo de como definir a 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 equivalente 38 decimal é especificado. Numerar os bits da direita para a esquerda. A opção de máscara de afinidade inicia a contagem de processadores de 0 a 31, de modo que, no exemplo a seguir, o contador 1 represente o segundo processador no servidor.

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

Esses são affinity mask valores para um sistema de 8 CPU.

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 de máscara de afinidade é uma opção avançada. Se você usar o procedimento armazenado do sistema sp_configure para alterar a configuração, poderá alterar affinity mask somente quando mostrar opções avançadas estiverem definidas como 1. Depois de executar o comando RECONFIGURE Transact-SQL, a nova configuração entra em vigor imediatamente sem a necessidade de uma reinicialização da instância do SQL Server.

Numa (Acesso à Memória Não Uniforme)

Ao usar o NUMA (acesso à memória não uniforme) baseado em hardware e a máscara de afinidade é definida, cada agendador em um nó será afinidadedo com sua própria CPU. Quando a máscara de afinidade não é definida, cada agendador é afinitizado ao grupo de CPUs dentro do nó NUMA, e um agendador mapeado para o nó NUMA N1 pode programar 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 licenciamento

A afinidade dinâmica é restrita com rigor pelo licenciamento de CPU. O SQL Server não permite nenhuma configuração de opções de máscara de afinidade que violem 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, em seguida, redefinirá o valor de execução 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 Transact-SQL comando RECONFIGURE, uma mensagem de erro será relatada à sessão do cliente e ao log de erros do SQL Server, exigindo que o administrador do banco de dados reconfigure a máscara de afinidade. Nenhum comando RECONFIGURE WITH OVERRIDE é aceito nesse caso.

Consulte Também

Monitorar o uso de recursos (Monitor do Sistema)
RECONFIGURAR (Transact-SQL)
Opções de configuração do servidor (SQL Server)
sp_configure (Transact-SQL)
ALTER SERVER CONFIGURATION (Transact-SQL)