Computar limites de capacidade por edição do SQL Server

Aplica-se: SQL Server

Este artigo discute os limites de capacidade de computação das edições diferentes do SQL Server e quais suas diferenças em ambientes físicos e virtuais com processadores de multithreading simultâneo (SMT). Em CPUs Intel, o SMT é chamado Hyper-Threading.

Visão geral

Diagrama mostrando os mapeamentos para calcular os limites de capacidade.

Esta tabela descreve as notações do diagrama anterior:

Valor Descrição
0..1 Zero ou um
1 Exatamente um
1..* Um ou mais
0..* Zero ou mais
1..2 Um ou dois

Para elaborar mais:

  • Uma VM (máquina virtual) tem um ou mais processadores virtuais.
  • Uma ou mais processadores virtuais são alocados a exatamente uma máquina virtual.
  • Zero ou um processador virtual é mapeado para zero ou mais processadores lógicos. Quando o mapeamento dos processadores virtuais para os processadores lógicos é:
    • Um para zero: representa um processador lógico não associado não usado pelos sistemas operacionais convidados.
    • Um para muitos: representa uma superconfirmação.
    • Zero para muitos: representa a ausência de máquina virtual no sistema host. Portanto, as VMs não usam nenhum processador lógico.
  • Um soquete é mapeado para zero ou mais núcleos. Quando o mapeamento do soquete para núcleo é:
    • Um para zero: representa um soquete vazio. Não há chip instalado.
    • Um para um: representa um chip de núcleo único instalado no soquete. Esse mapeamento é raro nos dias atuais.
    • Um para muitos: representa um chip de vários núcleos instalado no soquete. Os valores típicos são 2, 4 e 8.
  • Um núcleo é mapeado para um ou dois processadores lógicos. Quando o mapeamento dos núcleos cores para os processadores lógicos é:
    • Um a um: SMT desligado.
    • Um a dois: SMT ligado.

As definições a seguir aplicam-se aos termos usados neste artigo:

  • Um thread ou processador lógico é um mecanismo de computação lógico da perspectiva do SQL Server, do sistema operacional, de um aplicativo ou de um driver.

  • Um núcleo é uma unidade de processador. Ele pode consistir em um ou mais processadores lógicos.

  • Um processador físico pode consistir em um ou mais núcleos. Um processador físico é o mesmo que um pacote de processadores ou um soquete.

Limitar o número de núcleos lógicos por nó NUMA a 64

Você pode enfrentar problemas como despejos de pilha em servidores com mais de 64 processadores lógicos por nó NUMA. Uma configuração de BIOS ou firmware pode reduzir a contagem de núcleos lógicos apresentados ao sistema operacional para um máximo de 64 processadores lógicos por nó NUMA.

Cuidado

A Atualização Cumulativa 11 do SQL Server 2022 (16.x) introduziu uma alteração interruptiva que impede a inicialização do Mecanismo de Banco de Dados se o servidor detectar mais de 64 núcleos lógicos por nó NUMA.

Desabilitando o SMT, você pode reduzir a contagem de núcleos lógicos por nó NUMA em uma Máquina Virtual do Azure. Para Instâncias bare-metal do SQL Server, você pode reduzir a contagem de núcleos lógicos com as opções de SNC (clustering sub-NUMA) ou NPS (Nós por Soquete).

Desabilitar SMT em uma máquina virtual do Azure

O SQL Server tem um limite com suporte de 64 núcleos lógicos por nó NUMA. Em alguns casos, a VM da série Mv3 do Azure pode exceder esse limite, o que impede que o SQL Server seja iniciado ou permite que ele seja executado com desempenho reduzido. Para desabilitar o SMT, faça as seguintes alterações usando o PowerShell e o Editor do Registro (reg.exe). Faça o backup do registro antes de editá-lo.

  1. Verifique o número de núcleos lógicos. O SMT será habilitado se a proporção for 2:1 (o número de núcleos lógicos é o dobro do número de núcleos).

    Get-CimInstance -ClassName Win32_Processor | Select-Object -Property "NumberOfCores", "NumberOfLogicalProcessors"
    
  2. Desabilite o SMT com as duas alterações de registro a seguir e reinicialize a VM.

    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 8264 /f
    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f
    
  3. Verifique o número de núcleos lógicos mais uma vez. O número de núcleos lógicos deve corresponder ao número de núcleos.

    Get-CimInstance -ClassName Win32_Processor | Select-Object -Property "NumberOfCores", "NumberOfLogicalProcessors"
    

Reduzir a contagem de núcleos lógicos em instâncias bare-metal

As tabelas a seguir descrevem como reduzir a contagem de núcleos lógicos em instâncias bare-metal do SQL Server.

Em CPUs Intel, você pode habilitar o clustering sub-NUMA (SNC), anteriormente chamado de Cluster-on-Die (CoD), resultando em dois domínios NUMA em um único soquete físico.

Definição de configuração Descrição
SNC desabilitado (padrão) Desabilita o clustering sub-NUMA.
SNC habilitado Habilita o clustering sub-NUMA.

Em CPUs AMD, você pode habilitar várias opções de nós por soquete (NPS).

Definição de configuração Descrição
NPS0 Em um sistema de soquete duplo, o NUMA se apresenta como um único nó com todos os canais de memória intercalados no nó.
NPS1 (padrão) Essa configuração apresenta um nó NUMA por soquete.
NPS2 Essa configuração apresenta dois nós NUMA por soquete, semelhante ao SNC.
NPS4 Essa configuração apresenta quatro nós NUMA por soquete.

Comentários

Os sistemas com mais de um processador físico ou sistemas com processadores físicos que têm vários núcleos e/ou SMT permitem que o sistema operacional execute várias tarefas simultaneamente. Cada thread de execução aparece como um processador lógico. Por exemplo, se você tiver um computador com dois processadores com núcleo quádruplo, SMT habilitado e dois threads por núcleo, você terá 16 processadores lógicos: 2 processadores x 4 núcleos por processador x 2 threads por núcleo. Vale a pena observar que:

  • A capacidade de computação de um processador lógico de um único thread de um núcleo SMT é menor que a capacidade de computação de um processador lógico daquele mesmo núcleo com SMT desabilitado.

  • A capacidade de computação dos dois processadores lógicos no núcleo SMT é maior que a capacidade de computação do mesmo núcleo com SMT desabilitado.

Cada edição do SQL Server tem dois limites de capacidade de computação:

  • Um número máximo de soquetes (ou de processadores físicos ou de pacotes de processadores)

  • Um número máximo de núcleos como relatado pelo sistema operacional

Esses limites se aplicam a uma única instância do SQL Server. Eles representam a capacidade máxima de computação que uma única instância usa. Eles não restringem o servidor onde a instância pode ser implantada. Na verdade, implantar várias instâncias do SQL Server no mesmo servidor físico é um modo eficiente de usar a capacidade de computação de um servidor físico com mais soquetes e/ou núcleos que os permitidos pelos limites de capacidade.

A tabela a seguir especifica os limites de capacidade de computação para uma única instância de cada edição do SQL Server:

SQL Server edição Capacidade máxima de computação para uma só instância (Mecanismo de Banco de Dados do SQL Server) Capacidade máxima de computação para uma única instância (AS, RS)
Edição Enterprise: licenciamento baseado em núcleo 1 Máximo do sistema operacional Máximo do sistema operacional
Desenvolvedor Máximo do sistema operacional Máximo do sistema operacional
Standard Limitado a menos de 4 soquetes ou 24 núcleos Limitado a menos de 4 soquetes ou 24 núcleos
Express Limitado a menos de 1 soquete ou 4 núcleos Limitado a menos de 1 soquete ou 4 núcleos

1 O licenciamento da Edição Enterprise com Servidor + CAL (licença de acesso para cliente) é limitado a 20 núcleos por Instância do SQL Server. (Esse licenciamento não está disponível para novos contratos.) Não há limites no modelo de Licenciamento de Servidor Baseado em Núcleo.

Em um ambiente virtualizado, o limite de capacidade de computação é baseado no número de processadores lógicos, e não de núcleos. O motivo é que a arquitetura dos processadores não é visível aos aplicativos convidados.

Por exemplo, um servidor com quatro soquetes preenchidos com processadores com núcleo quádruplo e com a capacidade para habilitar dois threads SMT por núcleo contém 32 processadores lógicos com o SMT habilitado. No entanto, ele contém só 16 processadores lógicos com SMT desabilitado. Esses processadores lógicos podem ser mapeados para máquinas virtuais no servidor. A carga de computação das máquinas virtuais nesse processador lógico é mapeada para um thread de execução no processador físico no servidor host.

Quando o desempenho de cada processador virtual for importante, você poderá desabilitar o SMT. Você pode configurar o SMT usando uma configuração de BIOS para o processador durante a instalação da BIOS, mas é geralmente uma operação no escopo do servidor, que afeta todas as cargas de trabalho que estiverem sendo executadas no servidor. Você pode considerar separar as cargas de trabalho que são executadas em ambientes virtualizados das cargas de trabalho que se beneficiariam do aumento de desempenho do SMT em um ambiente de sistema operacional físico.

Obter ajuda

Contribua com a documentação do SQL

Você sabia que pode editar conteúdo do SQL por conta própria? Ao fazer isso, além de melhorar nossa documentação, você também será creditado como um colaborador da página.

Para obter mais informações, confira Como contribuir para a documentação do SQL Server