AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 319145
Accepted
Brent Ozar
Brent Ozar
Asked: 2022-11-04 08:38:35 +0800 CST2022-11-04 08:38:35 +0800 CST 2022-11-04 08:38:35 +0800 CST

Por que a configuração do SQL Server recomenda o MAXDOP 8 aqui?

  • 772

Estou executando a configuração do SQL Server 2022 RC1 em um AWS i3.16xlarge com 2 soquetes, 2 nós NUMA, 32 processadores lógicos por nó, 64 processadores lógicos no total.

A configuração está recomendando MAXDOP 8:

Configuração do SQL Server e Gerenciador de Tarefas

Mas se você clicar nesse link para configurar o MAXDOP , as recomendações dizem:

Recomendações MAXDOP

Com base nesse artigo da KB, MAXDOP deve ser 16, não 8. Claro, tecnicamente 8 é menor que 16 - mas também é 2, ou 4, ou 15. De onde vem o 8?

Após a conclusão da instalação do SQL Server e a inicialização do serviço, o log mostra que o SQL Server está implementando automaticamente o Soft-NUMA com 4 nós, cada um com 16 processadores lógicos:

Log de erros do SQL Server

Então, novamente, isso indica que MAXDOP deve ser 16.

Isso é um bug, ou eu perdi algo óbvio? Existe outra regra não escrita em algum lugar que a configuração irá parar no MAXDOP 8?

sql-server
  • 2 2 respostas
  • 1791 Views

2 respostas

  • Voted
  1. Best Answer
    Sean Gallardy
    2022-11-04T11:25:59+08:002022-11-04T11:25:59+08:00

    A configuração está recomendando MAXDOP 8

    A instalação calcula o MAXDop da seguinte forma:

    Step 1: Calculate Hardware NUMA and Soft NUMA
    Step 2: Decide whether Hardware or Soft NUMA will be used
    Step 3: Divide the total logical processors by the NUMA used
    Step 4: If > 15 LPs/NUMA, MAXDop = (LPs/NUMA)/2, otherwise MAXDop = LPs/NUMA
    

    No seu caso específico:

    64 LPs total
    HW NUMA = 2
    Soft NUMA = 4
    

    Soft NUMA será usado, 64 LPs/4 (Soft) = 16. 16 > 15, pegue 16 / 2 = 8.

    Se as pessoas concordam com o /2 extra ou não, dado >15 LPs/NUMA é um ponto de discussão. Independentemente disso, é o que existe atualmente e se encaixa nas recomendações do artigo MSDN TechNet BOL Docs Learn.

    • 19
  2. Joe Obbish
    2022-11-04T10:42:36+08:002022-11-04T10:42:36+08:00

    Entendo seu desejo de entender por que a configuração do SQL Server está recomendando 8 para MAXDOP. Infelizmente, sob condições padrão (auto soft-NUMA habilitado), a documentação recomendará um intervalo aceitável para MAXDOP para quase todos os servidores em vez de um valor único exato.

    A documentação diz o seguinte:

    O nó NUMA na tabela acima refere-se a nós soft-NUMA criados automaticamente pelo SQL Server 2016 (13.x) e versões superiores, ou nós NUMA baseados em hardware se o soft-NUMA tiver sido desabilitado.

    Seu servidor tem dois soquetes com hyperthreading habilitado. Existem 16 núcleos físicos por soquete e 32 núcleos lógicos por soquete. Auto soft-NUMA também está habilitado. Aqui está um gráfico estimado de como o auto soft-NUMA lida com essa situação, com a coluna A como o número de agendadores por soquete:

    num gráfico

    Para o seu servidor, você terá 4 nós soft-NUMA de 16 processadores lógicos cada. Isso significa que a orientação da linha 3 se aplica à sua situação:

    Mantenha MAXDOP igual ou abaixo de # de processadores lógicos por nó NUMA

    Um valor MAXDOP de 8 é menor que seu valor de 16 processadores lógicos por nó soft-NUMA, portanto, não há conflito com a documentação.

    A documentação não parece ser projetada para fornecer orientação exata para a maioria dos cenários quando o auto soft-NUMA está ativado. Apenas as linhas 2 e 4 fornecem orientação precisa em vez de uma faixa MAXDOP aceitável. Para a linha 2, a única maneira de obter esse resultado com auto soft-NUMA é um servidor de soquete único com hyperthreading habilitado que tenha entre 10 e 16 núcleos lógicos. Para a linha 4, não é possível obter esse resultado com auto soft-NUMA habilitado.

    Voltando a como a configuração do SQL Server funciona e por que ele escolhe 8, pode não estar documentado em nenhum lugar. Não estou mais em condições de testar com grandes servidores, então não posso procurar configurações de servidor que levem a um valor padrão maior que 8. Com isso dito, a Microsoft ao longo dos anos recomendou não exceder 8 em vários lugares. Por exemplo :

    No Banco de Dados SQL do Azure, a configuração MAXDOP padrão para cada novo banco de dados único e banco de dados de pool elástico é 8. Esse padrão evita a utilização desnecessária de recursos, enquanto ainda permite que o mecanismo de banco de dados execute consultas mais rapidamente usando threads paralelos. Normalmente, não é necessário configurar ainda mais o MAXDOP nas cargas de trabalho do Banco de Dados SQL do Azure, embora possa fornecer benefícios como um exercício avançado de ajuste de desempenho.

    Em setembro de 2020, com base em anos de telemetria no serviço de Banco de Dados SQL do Azure, o MAXDOP 8 tornou-se o padrão para novos bancos de dados, como o valor ideal para a mais ampla variedade de cargas de trabalho do cliente. Esse padrão ajudou a evitar problemas de desempenho devido ao paralelismo excessivo.

    Essas cotações são para o Banco de Dados SQL do Azure, portanto, não são diretamente aplicáveis ​​à sua situação, mas acho que ilustram a mentalidade geral da Microsoft de que ir acima do MAXDOP 8 é um "exercício de ajuste de desempenho avançado".

    Pessoalmente, o MAXDOP 8 para a configuração de hardware do seu servidor parece um ponto de partida razoável. Eu não começaria com MAXDOP 16 a menos que houvesse algum fator de carga de trabalho. Considere o melhor resultado de desempenho geralmente acreditado para a distribuição paralela de trabalhadores: todos os trabalhadores devem estar em diferentes núcleos físicos no mesmo nó NUMA rígido. Sem TF 2467 ou truques de hipervisor, aqui estão as probabilidades de como seus threads de trabalho serão distribuídos:

    chances

    MAXDOP 16 só garante o melhor resultado 9% das vezes.

    Pessoalmente, não acredito que a documentação da Microsoft nesta área seja muito boa. Há uma série de declarações ambíguas, enganosas ou simplesmente incorretas contidas nele. Pensamentos detalhados sobre isso estão aqui .

    • 6

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve