soft-NUMA (SQL Server)
Aplica-se a: SQL Server
Os processadores modernos têm vários núcleos por soquete. Cada soquete é representado, em geral, como um único nó NUMA. O mecanismo de banco de dados do SQL Server particiona diversas estruturas internas e particiona threads de serviço para cada 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 soft-NUMA (NUMA baseado em software) exigia a edição do Registro para adicionar uma máscara de afinidade de configuração de nó e era configurado no nível do host e não por instância. Desde o SQL Server 2014 (12.x) SP2 e o SQL Server 2016 (13.x), o soft-NUMA passou a ser configurado automaticamente no nível da instância do banco de dados quando o serviço Mecanismo de Banco de Dados do SQL Server é iniciado.
O soft-NUMA não dá suporte para processadores incluídos automaticamente.
Soft-NUMA automático
Com o SQL Server 2016 (13.x), sempre que o Mecanismo de Banco de Dados do SQL Server detecta mais de oito núcleos por nó NUMA ou soquete na inicialização, os nós soft-NUMA são criados automaticamente por padrão. Os núcleos de processador SMT (multithreading simultâneo) não são diferenciados ao contar núcleos físicos em um nó. Quando o número detectado de núcleos físicos for mais de oito por soquete, o Mecanismo de Banco de Dados do SQL Server criará nós soft-NUMA contendo o ideal de 8 núcleos, podendo reduzir para cinco ou aumentar para nove núcleos lógicos por nó. O tamanho do nó de hardware pode limitar-se a 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 permitidos.
Você pode desabilitar ou reabilitar o soft-NUMA usando a instrução ALTER SERVER CONFIGURATION (Transact-SQL) com o argumento SET SOFTNUMA
. Alterar o valor dessa configuração requer a efetivação da reinicialização do mecanismo de banco de dados.
A figura a seguir mostra o tipo de informações sobre o soft-NUMA que aparece no log de erros do SQL Server, quando o SQL Server detecta nós NUMA com mais de oito núcleos físicos para cada nó 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
Do SQL Server 2014 (12.x) SP 2 em diante, use o sinalizador de rastreamento 8079 para permitir que o SQL Server use soft-NUMA automático. Começando com SQL Server 2016 (13.x), esse comportamento é controlado pelo mecanismo e o sinalizador de rastreamento 8079 não tem nenhum efeito. Para obter mais informações, veja DBCC TRACEON – sinalizadores de rastreamento.
Soft-NUMA manual
Para configurar o SQL Server manualmente para usar o soft-NUMA, desabilite o soft-NUMA automático e edite o Registro para adicionar uma máscara de afinidade de configuração de nó. Ao usar esse método, a máscara do soft-NUMA pode ser declarada como uma entrada de registro binária, DWORD (hexadecimal ou decimal) ou QWORD (hexadecimal ou decimal). Para configurar mais que as primeiras 32 CPUs, use os valores do 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ê precisará reiniciar o Mecanismo de Banco de Dados para que a configuração do soft-NUMA entre em vigor.
Dica
As CPUs são numeradas a partir de 0
.
Aviso
A edição incorreta do Registro pode danificar seriamente o sistema. Antes de fazer alterações no Registro, é recomendável fazer backup dos dados importantes no computador.
Considere o exemplo de um computador com oito CPUs, que não tem NUMA de hardware. Três nós soft-NUMA são configurados.
A instância A Mecanismo de Banco de Dados é configurada para usar as CPUs 0 a 3. Uma segunda instância do Mecanismo de Banco de Dados está instalada e configurada para usar as CPUs 4 a 7. O exemplo pode ser visualmente representado 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 apresenta E/S significativa, agora tem dois threads de E/S e um thread de gravador lento. A instância B, que executa operações de processamento intenso, tem apenas um thread de E/S e um thread de gravador lento. 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á nenhuma afinidade do processador com a memória.
O thread de gravador lento é vinculado à exibição do SQLOS dos nós de memória NUMA físicos. Por isso, aquilo que o hardware apresenta como os nós NUMA físicos equivale ao número de threads de gravador lento criados. Para obter mais informações, confira Como funciona: Como funcionam o soft NUMA, o thread de término de E/S, os trabalhadores de gravador lento e os nós de memória.
Observação
As chaves do Registro Soft-NUMA não são copiadas quando você atualiza uma instância do SQL Server.
Defina a máscara de afinidade de CPU
Execute a instrução a seguir na instância A para configurá-la para usar as 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 instrução a seguir na instância B para configurá-la para usar as CPUs 4, 5, 6 e 7, definindo a máscara de afinidade da CPU:
ALTER SERVER CONFIGURATION
SET PROCESS AFFINITY CPU = 4 TO 7;
Mapear nós NUMA de software para CPUs
Usando o programa Editor do Registro (regedit.exe
), adicione as duas chaves do Registro seguintes para mapear o nó soft-NUMA 0 às 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 as CPUs 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 4 soquetes) e cada soquete esteja em seu próprio grupo K. Uma configuração de soft-NUMA que você poderia criar seria algo semelhante a isto: seis núcleos por nó, três nós por grupo, quatro grupos.
Exemplo para uma Instância do SQL Server com vários Grupos K | Tipo | Nome do valor | Dados do 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 exibir o estado e a configuração atuais do soft-NUMA.
sp_configure (Transact-SQL): exibe o valor atual (
0
ou1
) de SOFTNUMA.sys.dm_os_sys_info (Transact-SQL);: as colunas
softnuma_configuration
esoftnuma_configuration_desc
exibem os valores de configuração atuais.
Embora seja possível exibir o valor de execução do soft-NUMA automático usando sp_configure (Transact-SQL), não é possível alterar seu valor usando sp_configure
. Você deve usar a instrução ALTER SERVER CONFIGURATION (Transact-SQL) com o argumento SET SOFTNUMA
.