SQL Server não usando todos os núcleos / threads de CPU

15

Após a atualização do hardware do SQL Server, percebemos no Gerenciador de Tarefas do Windows que a instância do SQL está usando apenas metade dos threads disponíveis:

Gerenciador de tarefas.

O servidor possui o seguinte hardware e software:

  • Windows 2008 R2 Enterprise 64 bits SP1
  • Intel Xeon E7-4870 - 4 processadores (40 núcleos, 80 threads)
  • Microsoft SQL Server 2012 Enterprise Edition (64 bits)

A execução select cpu_count from sys.dm_os_sys_inforetorna 40.

O sistema operacional vê todos os 80 threads.

Por que apenas metade da capacidade de processamento do servidor está sendo usada?

Temos o mesmo hardware e software em dois servidores e ambos exibem o mesmo comportamento.

Jon Seigel
fonte

Respostas:

23

No log de erros do SQL Server, ele deve informar o motivo. Encontrei isso no sistema do cliente (colando realmente a mensagem do suco do Google):

O SQL Server detectou 4 soquetes com 8 núcleos por soquete e 16 processadores lógicos por soquete, total de 64 processadores lógicos; usando 40 processadores lógicos baseados no licenciamento do SQL Server. Esta é uma mensagem informativa; Não é necessária nenhuma ação do usuário.

Eu tenho a explicação provável a partir daqui :

Para clientes com Software Assurance em licenças existentes do SQL EE Server (ou acesso a eles sob os contratos corporativos atuais durante o período), foi criada uma versão do Enterprise Edition para permitir a atualização para o SQL Server 2012. Esta versão possui restrições técnicas que limitam uma instância a usando apenas 20 núcleos de processador (40 threads de CPU com Hyperthreading).

Resumo: no log de erros, a edição será relatada como Enterprise Editionou Enterprise Edition: Core-based Licensing. Se estiver indicado o primeiro, como no caso do sistema do cliente mencionado acima, você precisará obter uma licença baseada em núcleo para usar todos os núcleos disponíveis.

Se esse não for o caso, e você já estiver licenciado para todos os núcleos, verifique as configurações da máscara de afinidade, principalmente se elas foram definidas, e o hardware subjacente foi atualizado.

Jon Seigel
fonte
Tivemos um problema semelhante. Construímos uma VM com 1 soquete e 32 núcleos. O SQL reconheceria apenas 8 CPUs. Trocamos para 8 soquetes e 4 núcleos, o problema foi resolvido. Estamos executando a edição empresarial no sql 2008r2 no windows 2008r2.
user3799984
Eu tive o mesmo problema com uma versão padrão. Usamos 8 soquetes e não utilizamos o resto. Tudo o que tivemos que fazer é mudar a VM e configurar 4 soquetes e 2 núcleos.
Nicolas de Fontenay
7

Procure no ERRORLOG desde o início do SQL Server. Ele vai dizer quantas CPUs está sendo usada e provavelmente o porquê. Se você puder postar o arquivo ERRORLOG em algum lugar, será útil para ver o que está acontecendo.

Mrdenny
fonte
3

Vi isso em outro post de Ajmer Dhariwal:

Mesmo se você tiver a edição Enterprise, se o modelo de licenciamento aplicado for baseado em Server + Client Access License (CAL), o servidor estará limitado a 20 núcleos físicos por instância

Dom
fonte