Licenciamento por Sockets vs Cores: SQL Server em VMs
Neste artigo
- Introdução ao problema sockets vs cores em VMs
- Conceitos fundamentais: socket, núcleo, processador lógico
- Limites por edição do SQL Server 2022
- O problema prático em máquinas virtuais
- SMT/Hyper-Threading e processadores lógicos
- Limite NUMA de 64 núcleos lógicos
- Como configurar vCPU correctamente
- Erros comuns e checklist final
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 CoreSchedulerse necessário - Validar a configuração com
SELECT cpu_count FROM sys.dm_os_sys_infono 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.