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 / 169123
Accepted
PicoDeGallo
PicoDeGallo
Asked: 2017-04-05 11:07:07 +0800 CST2017-04-05 11:07:07 +0800 CST 2017-04-05 11:07:07 +0800 CST

Velocidade do clock da CPU versus contagem de núcleos da CPU - GHz mais alto ou mais núcleos para o SQL Server?

  • 772

Estamos começando a provisionar um conjunto de servidores físicos para um cluster virtual de nós do SQL Server 2016 no VMware. Estaremos utilizando licenças Enterprise Edition.

Planejamos configurar 6 nós, mas há um pouco de debate sobre qual a maneira ideal de provisionar os servidores físicos com relação à velocidade do clock da CPU versus a contagem de núcleos da CPU.

Eu sei que isso depende em grande parte do volume de transações e do número de bancos de dados armazenados entre outros fatores específicos do software, mas há uma regra geral recomendada?

Por exemplo, um servidor físico duplo de 8 núcleos e 3,2 GHz (16 núcleos) é mais preferencial do que um servidor duplo de 16 núcleos e 2,6 GHz (32 núcleos)?

Alguém já se deparou com um white paper que aprofunde esse tipo de tópico?

sql-server performance
  • 4 4 respostas
  • 25316 Views

4 respostas

  • Voted
  1. Best Answer
    Hannah Vernon
    2017-04-05T12:05:02+08:002017-04-05T12:05:02+08:00

    A regra geral é manter a contagem de núcleos o mais baixa possível e a velocidade do processador o mais alta possível. A matemática de licenciamento disso prova o ponto em ~ $ 7.500 USD por núcleo para Enterprise Edition.

    Comprar o hardware correto pode se pagar em custos de licenciamento reduzidos. Consulte Seleção de processador para SQL Server por Glenn Berry. É um ótimo recurso sobre como escolher um processador para o SQL Server.

    Depois de levar em consideração a estrutura de licenciamento por núcleo do SQL Server, faz sentido sempre usar a velocidade de processador mais rápida disponível, independentemente do tipo de carga de trabalho, seja OLTP ou analítica. Ter a velocidade de núcleo mais rápida possível nunca será um problema. Aumente a contagem de núcleos conforme necessário, mas nunca faça isso reduzindo a velocidade do núcleo.

    Em outras palavras, não pense em processadores de 16 x 2,2 Ghz sendo o mesmo que processadores de 8 x 4,4 Ghz. A economia de custos de hardware do uso de processadores de 2,2 Ghz sobre os processadores de 4,4 Ghz provavelmente será de no máximo US$ 10.000 (para uma máquina típica de dois processadores baseada em Xeon). no entanto, a mudança de 8 núcleos para 16 núcleos com o SQL Server Enterprise Edition provavelmente custará US$ 60.000 a mais em taxas de licenciamento. Em outras palavras, você pode economizar US$ 10.000 em custos de hardware, mas perderá US$ 50.000 extras em licenciamento.

    Se você decidir que precisa de muito músculo de processamento paralelo e decidir que precisa de 32 núcleos para a tarefa em mãos, usar os núcleos mais rápidos pagará dividendos em tempo de processamento reduzido. Ninguém vai te culpar por isso.

    Dito tudo isso, se a escolha for uma CPU ou mais de uma CPU, sempre vá com mais de uma . A execução do SQL Server (ou qualquer DBMS) em uma única CPU pode causar todos os tipos de problemas, pois a capacidade de operações simultâneas é muito limitada.

    • 45
  2. Erik Darling
    2018-04-26T05:32:34+08:002018-04-26T05:32:34+08:00

    Aguarde, aguarde, aguarde

    Embora os aspectos de desempenho e licenciamento sejam interessantes, eles não são o único aspecto de uma carga de trabalho a ser considerado.

    Uma coisa que pode ter um impacto na escolha do processador são os threads de trabalho.

    Tópicos do Trabalhador?

    Sim amigo! Eles são as coisas que seu SQL Server usará para executar suas consultas e fazer todas as coisas em segundo plano necessárias para manter as coisas em forma.

    Quando você fica sem threads de trabalho, você pressiona THREADPOOL espera

    GRUPO DE DISCUSSÃO?

    GRUPO DE DISCUSSÃO. Esta é uma das esperas mais desagradáveis ​​que você pode ter em seu servidor, junto com RESOURCE_SEMAPHORE e RESOURCE_SEMAPHORE_QUERY_COMPILE . Mas essas são esperas de memória, e esta é uma questão de CPU.

    Então, de volta ao porquê isso é wack wiggity.

    É assim que o SQL Server calcula os threads de trabalho :

    NOZES

    Observe como duplicar a contagem de núcleos não duplica o Max Worker Threads e você obtém o mesmo número com 1 núcleo e com 4 núcleos? A equação é:512 + ((logical CPUs - 4) * 16)

    Isso é uma pena, porque quando a contagem de núcleos aumenta, a velocidade do clock geralmente cai para uma ou duas gerações atrás.

    NOZES

    Dando uma olhada em qualquer linha recente de chips Intel mostrará uma tendência semelhante.

    Como saber quantos fios preciso?

    Isso vai depender muito de:

    • Número de usuários
    • Número de consultas paralelas
    • Número de consultas em série
    • Número de bancos de dados e sincronização de dados (Espelhamento, AGs, backups para Log Shipping)
    • Se você deixar MAXDOP e CTFP nos padrões

    Se você não está ficando sem eles hoje, provavelmente está bem.

    Mas como você sabe se você é?

    Há boas perguntas, e há grandes perguntas, e deixe-me dizer uma coisa, essa é uma ÓTIMA PERGUNTA .

    THREADPOOL pode se manifestar como problemas de conexão , e você pode ver mensagens no log de erros sobre não poder gerar um thread .

    Você também pode ver as estatísticas de espera do seu servidor usando uma ferramenta gratuita como sp_Blitz ou sp_BlitzFirst (divulgação completa, eu contribuo para este projeto).

    EXEC sp_Blitz

    NOZES

    EXEC sp_BlitzFirst @SinceStartup = 1

    NOZES

    Não posso simplesmente aumentar o Max Worker Threads?

    O aumento do MWT pode levar ao aumento das SOS_SCHEDULER_YIELDesperas.

    Isso não é o fim do mundo, mas pense nisso como adicionar um monte de crianças gritando à aula de um professor.

    De repente, vai ser mais difícil para cada criança chamar a atenção.

    Quando um processo esgota seu quantum de 4ms , potencialmente haverá mais threads à sua frente esperando para entrar na CPU.

    O desempenho pode parecer o mesmo.

    Como posso usar menos threads de trabalho?

    Você [substantivo] cruel de um [substantivo], esses são trabalhadores com famílias para sustentar! Hipotecas! Sonhos!

    Mas tudo bem, tenho que respeitar a linha de fundo. Você é o chefe.

    O lugar mais fácil para começar é alterar configurações como MAXDOP e Cost Threshold For Parallelism dos padrões.

    Se você tiver dúvidas sobre como configurá-los, acesse aqui:

    • Algoritmo de configuração MAXDOP para SQL Server

    • Por que o limite de custo para paralelismo não deve ser definido como 5

    Depois disso, seu trabalho fica muito mais difícil. Você tem que descobrir o que está usando todos esses tópicos. Às vezes, você pode fazer isso observando suas estatísticas de espera.

    Mais especificamente, se você tem altas esperas no paralelismo ( CXPACKET) E altas esperas nos bloqueios ( LCK_), então você pode estar se deparando com longas cadeias de bloqueio envolvendo consultas paralelas.

    Você sabe o que fede? Enquanto todas essas consultas paralelas estão esperando para obter seus bloqueios, elas não devolvem seus threads alocados.

    Você quase pode ouvir aquela VM de quatro núcleos que seu administrador garantiu que era mais do que suficiente para qualquer carga de trabalho sem fôlego, hein?

    Infelizmente, o tipo de consulta e ajuste de índice que você precisa fazer para resolver essas coisas está além do escopo da questão.

    Espero que isto ajude!

    • 15
  3. 2 revsuser126897
    2018-04-26T00:05:33+08:002018-04-26T00:05:33+08:00

    Resposta do wiki da comunidade :

    Resumindo: a maioria das cargas de trabalho para SQL Server são OLTP, que se beneficiam de velocidades de clock mais altas porque é uma operação serial.

    A menos que você esteja projetando especificamente para um sistema massivamente paralelo, as velocidades de clock sempre prevalecerão. Existem casos extremos, mas essa é a resposta de 95% do tempo. O fato de acabar custando menos também é uma coisa legal.

    • 2
  4. Ahmad Rashed
    2017-04-05T14:43:33+08:002017-04-05T14:43:33+08:00

    A resposta se resume a isso: depende do seu caso de uso.

    • Você está processando várias solicitações pequenas de uma só vez ou algumas solicitações grandes?
    • O programa que você executa está otimizado para multi-core?

    Por exemplo, eu tenho um computador quad core, mas o compilador ESP8266 usa apenas 25% da minha CPU porque foi projetado para usar apenas um núcleo. Se eu tivesse 1 núcleo rápido, isso seria mais ideal.

    • -3

relate perguntas

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

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

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

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