Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Observação
Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. Em vez disso, use ALTER SERVER CONFIGURATION .
Para realizar multitarefas, o Windows às vezes move threads de processo entre diferentes processadores. Embora eficiente do ponto de vista do sistema operacional, essa atividade pode reduzir o desempenho do SQL Server sob cargas pesadas do sistema, pois cada cache do processador é repetidamente recarregado com dados. A atribuição de processadores a threads específicos pode melhorar o desempenho nessas condições, eliminando as recargas do processador; Essa associação entre um thread e um processador é chamada de afinidade de processador.
O SQL Server oferece suporte à afinidade do processador com duas opções de máscara de afinidade: affinity mask (também conhecida como máscara de afinidade da CPU) e affinity I/O mask. Para obter mais informações sobre o , consulte Configuração do affinity I/O mask optionservidor: máscara de E/S de afinidade. O suporte de afinidade de CPU e E/S para servidores com 33 a 64 processadores requer que você também use as opções de configuração do servidor de máscara de E/S affinity64 e affinity64, respectivamente.
Observação
O suporte de afinidade para servidores com processadores de 33 a 64 só está disponível em sistemas operacionais de 64 bits.
A affinity mask opção, que existia em versões anteriores do SQL Server, controla dinamicamente a afinidade da CPU.
No SQL Server, a affinity mask opção pode ser configurada sem exigir uma reinicialização da instância do SQL Server. Quando você usa, sp_configure, você deve executar uma ou RECONFIGURERECONFIGURE WITH OVERRIDE depois de definir uma opção de configuração. Quando você estiver usando o SQL Server Express, alterar a affinity mask opção requer uma reinicialização.
As alterações nas máscaras de afinidade ocorrem dinamicamente, permitindo a inicialização e o desligamento sob demanda dos agendadores de CPU que vinculam threads de processo no SQL Server. Isso pode ocorrer à medida que as condições mudam no servidor. Por exemplo, se uma nova instância do SQL Server for adicionada ao servidor, talvez seja necessário fazer ajustes na opção para redistribuir a affinity mask carga do processador.
As modificações nas máscaras de bits de afinidade exigem que o SQL Server habilite um novo agendador de CPU e desabilite 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 novo agendador e o adiciona à lista de seus agendadores padrão. O novo agendador é considerado apenas para os novos lotes recebidos. Os lotes atuais continuam a ser executados no mesmo agendador. Os trabalhadores migram para o novo agendador à medida que se libertam ou à medida que novos trabalhadores são criados.
Desligar um agendador requer que todos os lotes no agendador concluam suas atividades e saiam. Um agendador desligado é marcado como offline para que nenhum novo lote seja agendado nele.
Se você adicionar ou remover um novo agendador, as tarefas permanentes do sistema, como monitor de bloqueio, ponto de verificação, thread de tarefas do sistema (DTC de processamento) e processo de sinal, continuarão a ser executadas no agendador enquanto o servidor estiver operacional. Essas tarefas permanentes do sistema não migram 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 desligar um agendador associado a uma tarefa permanente do sistema, a tarefa continuará a ser executada no agendador offline (sem migração). Este agendador está vinculado aos processadores na máscara de afinidade modificada e não coloca nenhuma carga no processador ao qual estava vinculado antes da alteração. Ter agendadores offline extras não deve afetar significativamente a carga do sistema. Se isso acontecer, uma reinicialização do servidor de banco de dados será necessária para reconfigurar essas tarefas nos agendadores disponíveis com a máscara de afinidade modificada.
Não defina os valores e affinity I/O mask de affinity mask configuração do SQL Server para usar as mesmas CPUs. O desempenho pode ser prejudicado se você optar por vincular um processador para agendamento de threads de trabalho do SQL Server e para processamento de E/S. Portanto, certifique-se de que os valores de configuração não estejam definidos para o mesmo processador. A mesma recomendação se aplica ao affinity64 mask e affinity64 I/O mask. Para garantir que o affinity mask não se sobreponha ao affinity I/O mask, o comando RECONFIGURE verifica se as afinidades normais de CPU e E/S são mutuamente exclusivas. Caso contrário, uma mensagem de erro é relatada para a sessão do cliente e para o 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.
As opções de execução RECONFIGURE WITH OVERRIDE permitem que as afinidades de CPU e E/S se sobreponham e não sejam mutuamente exclusivas.
As tarefas de afinidade de E/S (como gravador preguiçoso e gravador de log) são diretamente afetadas pelo affinity I/O mask. Se as tarefas de gravador preguiçoso e gravador de log não estiverem vinculadas, elas seguirão as mesmas regras definidas para as outras tarefas permanentes, como monitor de bloqueio ou ponto de verificação.
Se você especificar uma máscara de afinidade que tente mapear para uma CPU inexistente, o RECONFIGURE comando relatará uma mensagem de erro para a sessão do cliente e o log de erros do SQL Server. O uso da RECONFIGURE WITH OVERRIDE opção não tem efeito neste 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 uma máscara de bits que especifica os processadores qualificados para seleção.
Ao separar threads do SQL Server da execução em processadores específicos, o Microsoft Windows pode avaliar melhor o processamento de processos específicos do Windows pelo sistema. Por exemplo, em um servidor de 8 CPUs executando duas instâncias do SQL Server (instância A e B), o administrador do sistema pode usar a affinity mask opção 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 o e o affinity maskaffinity64 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 cobrir mais de 32 CPUs, configure um byte de 4 para affinity mask as primeiras 32 CPUs e até 4 bytes affinity64 mask para as CPUs restantes.
Como a definição de 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 fornece o melhor desempenho. Considere 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 Process Monitor para visualizar e analisar o uso individual do processador.
Ao especificar a affinity I/O mask opção, você deve usá-la com a affinity mask opção de configuração. No entanto, como mencionado anteriormente, não habilite a mesma CPU no switch e na affinity maskaffinity I/O mask opção. Os bits correspondentes a cada CPU devem estar em um destes três estados:
-
0tanto naaffinity maskopção como naaffinity I/O maskopção. -
1affinity maskna opção e0naaffinity I/O maskopção. -
0affinity maskna opção e1naaffinity I/O maskopção.
Atenção
Não configure a afinidade da CPU no sistema operacional Windows e também configure o affinity mask no SQL Server. Essas configurações estão tentando obter o mesmo resultado e, se as configurações forem inconsistentes, você pode ter resultados imprevisíveis. A afinidade de CPU do SQL Server é melhor configurada usando a sp_configure opção no SQL Server.
Examples
Como exemplo de configuração da opção, se os affinity mask processadores 1, 2 e 5 forem selecionados como disponíveis com bits nas posições 1, 2 e 5 definidos como 1 e bits 0, 3, 4, 6 e 7 definidos como 0, um valor hexadecimal de 0x26 (o equivalente decimal de 38) deve ser usado. Numere as posições de bit 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 affinity mask valores para um sistema de 8 CPUs.
| Valor decimal | Máscara de bits binários | Permitir 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 affinity mask opção é uma opção avançada. Se estiver a utilizar o procedimento armazenado do sp_configure sistema para alterar a definição, só pode alterar affinity mask quando show advanced options estiver definido como 1. Depois que o comando Transact-SQL RECONFIGURE for executado, a nova configuração entrará em vigor imediatamente sem exigir uma reinicialização da instância do SQL Server.
Acesso não uniforme à memória (NUMA)
Ao usar o acesso não uniforme à memória (NUMA) baseado em hardware e o affinity mask está definido, cada agendador em um nó se liga à sua própria CPU. Quando o affinity mask não está definido, cada agendador é vinculado ao grupo de CPUs dentro do nó NUMA e um agendador mapeado para o nó N1 NUMA pode agendar o trabalho em qualquer CPU no nó, mas não em CPUs associadas a outro nó.
Qualquer operação em execução em um único nó NUMA só pode usar páginas de buffer desse nó. Quando uma operação é executada em paralelo em CPUs de vários nós, a memória pode ser usada a partir de qualquer nó envolvido.
Problemas de licença
A afinidade dinâmica é fortemente restringida pelo licenciamento da CPU. O SQL Server não permite nenhuma configuração de opções que viole a política de affinity mask licenciamento.
Startup
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 sp_configure valor de execução da máscara de afinidade para 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 RECONFIGURE comando, 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 RECONFIGURE WITH OVERRIDE comando é aceito neste caso.