Licenciamento por Sockets vs Cores: SQL Server em VMs

1. Introdução ao problema sockets vs cores em VMs

O licenciamento do SQL Server em ambientes virtualizados depende directamente da forma como os recursos de CPU são apresentados ao sistema operativo convidado. A Microsoft estabelece limites de computação diferentes consoante a edição do SQL Server, medindo esses limites em sockets (soquetes), núcleos (cores) ou processadores lógicos (threads), consoante o contexto.

Em ambientes virtualizados, o limite é baseado em processadores lógicos e não em núcleos físicos, porque a arquitectura do processador não é visível para o sistema operativo convidado. Isto significa que a configuração da topologia vCPU — quantos sockets e quantos cores por socket — afecta directamente o cumprimento dos limites de licenciamento e o desempenho da instância.

A documentação oficial da Microsoft, disponível em Compute Capacity Limits by Edition of SQL Server, define os conceitos e os limites com precisão. Este artigo explica esses conceitos, demonstra o problema prático em VMs e mostra como configurar a topologia de vCPU correctamente em cada hypervisor.

2. Conceitos fundamentais: socket, núcleo, processador lógico

A Microsoft define três níveis de arquitectura de processador que determinam os limites de licenciamento do SQL Server. Compreender a distinção entre estes três conceitos é essencial para configurar VMs correctamente.

Termo Definição Exemplo
Processador físico (socket) Encapsulamento que contém um ou mais núcleos. Corresponde a um soquete no motherboard. 1 processador Intel Xeon com 8 núcleos = 1 socket
Núcleo (core) Unidade de processador dentro de um encapsulamento. Pode ter um ou mais processadores lógicos. 1 núcleo com SMT activo = 2 processadores lógicos
Processador lógico (thread) Mecanismo de computação lógica, perspectiva do SQL Server, do SO e da aplicação. 4 núcleos sem SMT = 4 processadores lógicos

A tecnologia SMT (Simultaneous Multithreading), conhecida como Hyper-Threading na Intel, permite que um único núcleo físico execute duas threads em paralelo. Quando o SMT está activo, cada núcleo apresenta 2 processadores lógicos ao sistema operativo. Quando o SMT está desactivado, cada núcleo apresenta apenas 1 processador lógico.

ℹ Diferença crítica em virtualização

Em ambientes virtualizados, o SQL Server conta processadores lógicos e não núcleos, porque a arquitectura do processador não é visível para o sistema operativo convidado. Uma VM com 2 núcleos e SMT activo apresenta 4 processadores lógicos ao SQL Server.

3. Limites por edição do SQL Server 2022

A tabela seguinte resume os limites oficiais do Database Engine para cada edição do SQL Server 2022, conforme a documentação da Microsoft.

Edição Limite (Database Engine) Modelo de licenciamento
Enterprise (core) Máximo do sistema operativo (sem limite) Por núcleo (mínimo 4 núcleos)
Enterprise (Server+CAL) Limitado a 20 núcleos por instância Legado, não disponível para novos contratos
Developer Máximo do sistema operativo Gratuito para desenvolvimento
Standard Menos de 4 sockets OU 32 núcleos Por núcleo (mínimo 4) ou Server+CAL
Express Menos de 1 socket OU 4 núcleos Gratuito

ℹ Actualização no SQL Server 2022

No SQL Server 2019 e versões anteriores, a edição Standard era limitada a “menos de 4 sockets OU 24 núcleos”. O SQL Server 2022 aumentou o limite de núcleos para 32, mantendo o limite de 4 sockets. A edição Web não é mencionada na documentação actual (descontinuada).

A regra “menos de” significa que o limite é estritamente inferior: a edição Express aceita no máximo 1 socket com 4 núcleos, e a Standard aceita no máximo 3 sockets ou 32 núcleos (o que for menor). O limite conta o menor valor entre sockets e núcleos.

4. O problema prático em máquinas virtuais

Considere um cenário comum: uma VM com 4 vCPUs configurada como 4 sockets x 1 núcleo cada. O SQL Server Express, que tem o limite de “menos de 1 socket”, vê 4 sockets — excede o limite — e passa a usar apenas 1 vCPU, desperdiçando 75% da capacidade atribuída.

A solução é reconfigurar a topologia da VM para 1 socket x 4 núcleos. Nesta configuração, o SQL Server Express vê 1 socket com 4 núcleos — dentro do limite — e utiliza os 4 núcleos disponíveis. O número total de vCPUs é o mesmo (4), mas a apresentação da topologia ao SO convidado muda completamente.

Configuração Sockets visíveis Núcleos visíveis Express (limite 1 socket)
4 sockets x 1 core 4 4 Excede limite — usa 1 vCPU
1 socket x 4 cores 1 4 Dentro do limite — usa 4 núcleos

⚠ Atenção à contagem em virtualização

Em ambientes virtualizados, o limite é baseado em processadores lógicos e não em núcleos, porque a arquitectura do processador não é visível para o sistema operativo convidado. Se o SMT estiver activo, uma VM com 2 núcleos apresenta 4 processadores lógicos ao SQL Server.

5. SMT/Hyper-Threading e processadores lógicos

O SMT (Simultaneous Multithreading), designado Hyper-Threading pela Intel, permite que cada núcleo físico execute duas threads simultaneamente. Com o SMT activo, 1 núcleo apresenta 2 processadores lógicos ao sistema operativo. Com o SMT desactivado, 1 núcleo apresenta apenas 1 processador lógico.

Em ambientes virtualizados, o SQL Server conta processadores lógicos. Uma VM com 2 núcleos e SMT activo apresenta 4 processadores lógicos. Uma VM com 2 núcleos e SMT desactivado apresenta 2 processadores lógicos. Isto afecta directamente o cumprimento dos limites de licenciamento.

Configuração Núcleos físicos SMT Processadores lógicos Impacto no licenciamento
2 núcleos, SMT on 2 Activado 4 SQL Server conta 4 lógicos
2 núcleos, SMT off 2 Desactivado 2 SQL Server conta 2 lógicos
4 núcleos, SMT on 4 Activado 8 Express excede limite de 4

ℹ Desactivar SMT em Azure VM

Para desactivar o SMT numa VM em Azure, utilize PowerShell no host Hyper-V com o parâmetro CoreScheduler:

Set-VMProcessor -VMName "NomeVM" -HypervisorSchedulerType CoreScheduler

6. Limite NUMA de 64 núcleos lógicos

O SQL Server 2022 tem um limite de 64 núcleos lógicos por nó NUMA. A partir da cumulative update CU11, o SQL Server 2022 não arranca se um nó NUMA tiver mais de 64 processadores lógicos. A CU15 introduziu um aviso em vez de bloqueio total, mas o limite mantém-se.

Este problema ocorre tipicamente em hosts com muitos núcleos e SMT activo, onde o número de processadores lógicos por nó NUMA excede 64. As soluções passam por desactivar o SMT ou configurar SNC (Sub-NUMA Clustering) ou NPS (NUMA Per Socket) no BIOS para dividir o processador em nós NUMA mais pequenos.

⚠ SQL Server 2022 CU11 não arranca

Se um nó NUMA tiver mais de 64 processadores lógicos, o SQL Server 2022 CU11 recusa-se a arrancar. A CU15 mostra um aviso mas permite o arranque. A solução é desactivar o SMT ou usar SNC/NPS no BIOS para reduzir o número de lógicos por nó.

Para verificar os nós NUMA e o número de processadores lógicos em cada nó, utilize o seguinte comando PowerShell:

# Verificar nós NUMA e processadores lógicos por nó
Get-WmiObject Win32_NumaNode | Select-Object NodeID, NumberOfProcessors

7. Como configurar vCPU correctamente

Cada hypervisor permite configurar a topologia de vCPU de forma diferente. A regra geral para SQL Server em VMs é configurar 1 socket com múltiplos núcleos em vez de múltiplos sockets com 1 núcleo cada, especialmente para as edições Express e Standard que têm limites de sockets.

Hypervisor Método Configuração recomendada
VMware vSphere vSphere Client → Edit Settings → CPUs → Cores per Socket 1 socket, 4 cores per socket
Hyper-V Set-VMProcessor -Count para vCPUs totais A topologia é controlada pelo SO convidado
Proxmox VE qm set com -sockets e -cores 1 socket, 4 cores
KVM/libvirt XML com topology sockets e cores 1 socket, 4 cores

VMware vSphere — No vSphere Client, editar as definições da VM, ir a CPUs e definir o número de sockets e cores por socket. Para 4 vCPUs com 1 socket, definir sockets=1 e cores por socket=4.

# VMware PowerCLI - configurar 1 socket com 4 núcleos
Set-VM -VM "NomeVM" -NumCpu 4 -CoresPerSocket 4 -Confirm:$false

Hyper-V — O Hyper-V não tem um parâmetro directo para definir cores por socket. O cmdlet Set-VMProcessor define o número total de vCPUs com -Count. A topologia (sockets vs cores) é controlada pelo sistema operativo convidado.

# Hyper-V - definir 4 vCPUs totais
Set-VMProcessor -VMName "NomeVM" -Count 4

Proxmox VE — Utilizar o comando qm set com os parâmetros -sockets e -cores.

# Proxmox VE - configurar 1 socket com 4 núcleos
qm set 100 -sockets 1 -cores 4

KVM/libvirt — No ficheiro XML de definição da VM, definir o elemento vcpu e a topologia dentro do elemento cpu.

<vcpu>4</vcpu>
<cpu>
  <topology sockets="1" cores="4" threads="1"/>
</cpu>

8. Erros comuns e checklist final

A tabela seguinte resume os erros mais comuns na configuração de vCPU para SQL Server em VMs, com a causa e a solução para cada um.

Problema Causa Solução
Express não usa todos os vCPUs VM configurada com múltiplos sockets (ex: 4s x 1c), excede limite de 1 socket Reconfigurar para 1 socket x 4 cores
Standard excede limite de 32 núcleos VM com mais de 32 núcleos atribuídos Reduzir para 32 núcleos ou actualizar para Enterprise
SQL Server 2022 CU11 não arranca Nó NUMA com mais de 64 processadores lógicos Desactivar SMT ou usar SNC/NPS no BIOS
SMT duplica contagem de processadores SMT activo faz 1 núcleo = 2 processadores lógicos Desactivar SMT ou ajustar contagem de núcleos
Configuração 4s x 1c vs 1s x 4c Topologia incorrecta para limites de sockets Usar sempre 1 socket com múltiplos cores para Express/Standard
Custo de licenciamento Enterprise Enterprise licenciado por núcleo (mínimo 4) Avaliar se Standard (32 núcleos) é suficiente

Checklist final de configuração:

  • Verificar a edição do SQL Server e os respectivos limites de sockets e núcleos
  • Configurar a VM com 1 socket e múltiplos núcleos (nunca múltiplos sockets com 1 núcleo)
  • Confirmar que o número de processadores lógicos não excede o limite da edição
  • Verificar nós NUMA: nenhum nó deve ter mais de 64 processadores lógicos (SQL Server 2022)
  • Avaliar o impacto do SMT: 1 núcleo com SMT = 2 processadores lógicos
  • Para Azure VMs, desactivar SMT com Set-VMProcessor -HypervisorSchedulerType CoreScheduler se necessário
  • Validar a configuração com SELECT cpu_count FROM sys.dm_os_sys_info no SQL Server

A configuração correcta da topologia vCPU é fundamental para garantir que o SQL Server utiliza todos os recursos atribuídos à VM e para cumprir os limites de licenciamento. Consulte sempre a documentação oficial da Microsoft para os limites actualizados de cada edição.