Partilhar via


Soft-NUMA (SQL Server)

Aplica-se a:SQL Server

Os processadores modernos têm vários núcleos por soquete. Cada soquete é representado, geralmente, como um único nó NUMA. O mecanismo de banco de dados do SQL Server particiona várias estruturas internas e particiona threads de serviço por nó NUMA. Com processadores contendo 10 ou mais núcleos por soquete, o uso de software NUMA para dividir nós NUMA de hardware geralmente aumenta a escalabilidade e o desempenho. Antes do SQL Server 2014 (12.x) SP2, o NUMA (soft-NUMA) baseado em software exigia que se editasse o registo para adicionar uma máscara de afinidade de configuração do nó, sendo configurado ao nível do host, em vez de por instância. A partir do SQL Server 2014 (12.x) SP2 e do SQL Server 2016 (13.x), o soft-NUMA é configurado automaticamente no nível da instância de banco de dados quando o serviço Mecanismo de Banco de Dados do SQL Server é iniciado.

Os processadores hot-add não são suportados pelo soft-NUMA.

NUMA suave automático

Com o SQL Server 2016 (13.x), sempre que o Mecanismo de Banco de Dados do SQL Server deteta mais de oito núcleos físicos por nó NUMA ou soquete na inicialização, os nós NUMA são criados automaticamente por padrão. Os núcleos de processador com multithreading simultâneo (SMT) não são diferenciados ao contar núcleos físicos num nó. Quando o número detetado de núcleos físicos é superior a oito por soquete, o Mecanismo de Banco de Dados do SQL Server cria nós soft-NUMA que têm, idealmente, oito núcleos, mas podem variar entre quatro e oito núcleos físicos por nó. O tamanho do nó de hardware pode ser limitado por uma máscara de afinidade de CPU. O número de nós NUMA nunca excede o número máximo de nós NUMA suportados.

Você pode desativar ou ativar novamente o soft-NUMA usando a instrução ALTER SERVER CONFIGURATION com o argumento SET SOFTNUMA. A alteração do valor dessa configuração requer uma reinicialização do mecanismo de banco de dados para entrar em vigor.

A figura abaixo mostra o tipo de informação sobre soft-NUMA que se pode ver no registo de erros do SQL Server, quando o SQL Server detectar unidades de hardware NUMA com mais de oito núcleos físicos por cada unidade ou soquete.

2016-11-14 13:39:43.17 Server      SQL Server detected 2 sockets with 12 cores per socket and 24 logical processors per socket, 48 total logical processors; using 48 logical processors based on SQL Server licensing. This is an informational message; no user action is required.
2016-11-14 13:39:43.35 Server      Automatic soft-NUMA was enabled because SQL Server has detected hardware NUMA nodes with greater than 8 physical cores.
2016-11-14 13:39:43.63 Server      Node configuration: node 0: CPU mask: 0x0000000000555555:0 Active CPU mask: 0x0000000000555555:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server      Node configuration: node 1: CPU mask: 0x0000000000aaaaaa:0 Active CPU mask: 0x0000000000aaaaaa:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server      Node configuration: node 2: CPU mask: 0x0000555555000000:0 Active CPU mask: 0x0000555555000000:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.
2016-11-14 13:39:43.63 Server      Node configuration: node 3: CPU mask: 0x0000aaaaaa000000:0 Active CPU mask: 0x0000aaaaaa000000:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.

Observação

A partir do SQL Server 2014 (12.x) SP 2, use o sinalizador de rastreamento 8079 para permitir que o SQL Server use o soft-NUMA automático. A partir do SQL Server 2016 (13.x), esse comportamento é controlado pelo mecanismo e o sinalizador de rastreamento 8079 não tem efeito. Para obter mais informações, consulte DBCC TRACEON - Trace Flags.

Manual de soft-NUMA

Para configurar manualmente o SQL Server para usar soft-NUMA, desative o soft-NUMA automático e edite o Editor de Registo para adicionar uma máscara de afinidade de configuração de nó. Ao usar esse método, a máscara soft-NUMA pode ser declarada como uma entrada de registro binária, DWORD (hexadecimal ou decimal) ou QWORD (hexadecimal ou decimal). Para configurar mais do que as primeiras 32 CPUs, use valores de registro QWORD ou BINARY (os valores QWORD não podem ser usados antes do SQL Server 2012 (11.x)). Depois de modificar o registro, você deve reiniciar o Mecanismo de Banco de Dados para que a configuração soft-NUMA entre em vigor.

Dica

As CPUs são numeradas começando com 0.

Advertência

A edição incorreta do registo pode danificar gravemente o seu sistema. Antes de fazer alterações no Registro, recomendamos que você faça backup de todos os dados valiosos no computador.

Considere o exemplo de um computador com oito CPUs que não tem hardware NUMA. Três nós soft-NUMA são configurados.
A instância A do Mecanismo de Banco de Dados está configurada para usar CPUs de 0 a 3. Uma segunda instância do Mecanismo de Banco de Dados é instalada e configurada para usar CPUs de 4 a 7. O exemplo pode ser representado visualmente como:

CPUs         0  1  2  3  4  5  6  7
Soft-NUMA   <-N0-><-N1-><----N2---->
SQL Server  <instance A><instance B>

A instância A, que experimenta E/S significativas, agora tem dois threads de E/S e um thread de gravador lento. A instância B, que executa operações intensivas do processador, tem apenas um thread de E/S e um thread de escritor preguiçoso. Diferentes quantidades de memória podem ser atribuídas às instâncias, mas, ao contrário do NUMA de hardware, ambas recebem memória do mesmo bloco de memória do sistema operacional e não há afinidade de memória com processador.

O thread de gravador lento está vinculado à visualização SQLOS dos nós físicos de memória NUMA. Portanto, qualquer que seja o hardware apresentado como o número de nós físicos NUMA, este é o número de threads de gravador preguiçoso que são criados. Para obter mais informações, consulte Como funciona: Soft NUMA, I/O Completion Thread, Lazy Writer Workers e Memory Nodes.

Observação

As chaves do Registro Soft-NUMA não são copiadas quando você atualiza uma instância do SQL Server.

Definir a máscara de afinidade da CPU

Execute a seguinte instrução na instância A para configurá-la para usar CPUs 0, 1, 2 e 3 definindo a máscara de afinidade da CPU:

ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 0 TO 3;

Execute a seguinte instrução na instância B para configurá-la para usar CPUs 4, 5, 6 e 7 definindo a máscara de afinidade da CPU:

ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 4 TO 7;

Mapeie nós soft-NUMA para CPUs

Usando o programa Editor de Registo (regedit.exe), adicione as seguintes chaves de registo para mapear o nó soft-NUMA 0 para as CPUs 0 e 1, o nó soft-NUMA 1 para as CPUs 2 e 3 e o nó soft-NUMA 2 para as CPUs 4, 5, 6 e 7.

Dica

Para especificar CPUs de 60 a 63, use um valor QWORD de F000000000000000 ou um valor BINARY de 1111000000000000000000000000000000000000000000000000000000000000.

No exemplo a seguir, suponha que você tenha um servidor DL580 G9, com 18 núcleos por soquete (em quatro soquetes), e cada soquete esteja em seu próprio grupo K. Uma configuração soft-NUMA que você pode criar seria semelhante ao exemplo a seguir: seis núcleos por nó, três nós por grupo, quatro grupos.

Exemplo para uma instância do SQL Server com vários K-Groups Tipo Nome do valor Dados de valor
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node0 DWORD Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node1 DWORD Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node2 DWORD Group 0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node3 DWORD Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node4 DWORD Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node5 DWORD Group 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node6 DWORD Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node7 DWORD Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node8 DWORD Group 2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 DWORD CPUMask 0x3f
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node9 DWORD Group 3
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 DWORD CPUMask 0x0fc0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node10 DWORD Group 3
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 DWORD CPUMask 0x3f000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\NodeConfiguration\Node11 DWORD Group 3

Metadados

Você pode usar as DMVs a seguir para visualizar o estado atual e a configuração do "soft-NUMA".

Embora você possa visualizar o valor de execução para soft-NUMA automático usando sp_configure (Transact-SQL), você não pode alterar seu valor usando sp_configure. Você deve usar a instrução ALTER SERVER CONFIGURATION (Transact-SQL) com o argumento SET SOFTNUMA.