Desempenho do Processador x Desempenho do SQL Server – Parte 1

Post 1/4. Este post é parte da série: Desempenho do Processador x Desempenho do SQL Server
Tempo de leitura estimado: 3 minutos

A CPU é um dos recursos mais fundamentais, senão o mais fundamental, de um computador. É ali que todos os recursos de um computador são coordenados.  Este é o primeiro post de mais uma série onde vamos aprender conceitos básicos sobre velocidade de CPU e como podemos usar isso para análises simples em consultas de um SQL Server.

Hoje vamos obter um conhecimento fundamental sobre CPU antes de partir para o SQL Server!

Clocks e Hertz

Você já deve estar cansado de ver os termos “2.5 GHz”, “3.0 GHz”, etc. Mas você sabe, de fato, o que eles significam? Embora eu necessite de uma série exclusiva somente para este assunto, é necessário um simples entendimento:

  • Quanto maior este valor, mais rápido as instruções são executadas

Basicamente,  toda CPU tem um “clock“, que é um dispositivo que “liga” e “desliga”  X vezes por segundo.  Cada vez que esse dispositivo “liga”, nós dizemos que houve um “clock tick”, ou, apenas “tick”.  Esse é o valor que você vê nas especificações:

  • Um processador de 1 Hertz (1 Hz) significa que seu clock liga e delisga 1 vez por segundo (1 tick por segundo)
  • 1000 Hertz, são 1000 ticks por segundo. Aqui se pode aplicar as unidades do SI (Sistema Internacional de Medidas) : 1000 Hertz = 1 KHz (Kilo Hertz)
  • 1 milhão de Hertz, ou 1 MHz, significa 1 milhão de ticks por segundo.
  • 2.5 GHz (Giga Hertz) , significa 2.5 x  1 bilhão (Giga), que equivale a 2 bilhões e 500 milhões de vezes por segundo

Uma vez que a velocidade do processador dita quantos ticks temos em um segundo, então, podemos calcular quanto tempo dura um tick. Pode parecer confuso o que eu vou dizer agora, mas é apenas uma questão de lógica, pare e reflita.

Cada tick do clock, leva um tempo fixo. Nenhum tick leva mais ou menos tempo que o outro tick. Então, quanto mais lento o processador,  maior será o tempo de 1 tick.  Pense em números pequenos, que vai ajudar:

  • Em um processador de 2 Hertz (dois ticks por segundo), cada tick leva 500 ms (0.5 segundos)
  • Em um processador de 4 Hertz (quatro ticks por segundo), cada tick leva 250 ms ( 0.250 segundos)
  • Percebeu a fórmula mágica pra calcular o tempo de 1 tick?
    • Tempo de um Tick, em Milssegundos = 1000ms/<Número Hertz>
    • 2.5 MHz = 1000/2500000 = 0,0004 ms (1 tick = 400 nanossegundos)
    • 1.0 MHz = 1000/1000000 = 0,001 (1 tick = 1000 nanossegundos)
    • 2.5 GHz  resulta num tick muuuuuuuuuuuuuuuuuuito pequeno! faça as contas você mesmo!

 

As instruções que um processador pode executar, gastam N ticks (isso porque, grosseiramente falando, cada vez que o clock liga, ele aciona certos circuitos e sincroniza o processador com a placa mãe, etc.) . Isso vai depender de cada processador, e de cada instrução.  A velocidade da CPU dita o tempo de cada instrução:

Em uma cpu fictícia de 2 Hz, uma instrução que gastasse 1 tick, demoraria 500 ms para executar. Uma instrução que custasse dois ticks, levaria 1 segundo. E assim por diante…

Por que saber de tudo isso é importante?

Quando você traz esses conceitos para o sistema operacional, e para os seus programas, como o SQL server, fica fácil entender certas coisas. No caso de uma simples consulta SQL, você tem centenas de milhares de instruções executando.  Por exemplo, uma query como esta:

 

Pode causar a execução de milhares de instruções. Vai depender da quantidade de registros, tamanho, concorrência, etc. A questão é que, no final das contas, tudo se resume ao que a CPU irá fazer, e entender a velocidade do seu processador vai te ajudar a compreender certos “fenômenos” e até planejar melhor seu ambiente. Imagine como esta query seria afetada se o tempo de cada instrução dobrasse…

No próximo  post vou mostrar todos estes conceito na prática, quando você executa uma query no SQL Server!

Até lá!

UPDATE: Obrigado ao Luiz Vitor pelas indicações de correção no texto!
UPDATE 2: Muito obrigado José Diz pelas dicas, principalmente sobre o sistema internacional de medidas!

Navegue na série Desempenho do Processador x Desempenho do SQL Server – Parte 2 >>
Compartilhe este post!

Comments ( 4 )

  1. / Replyrauldoliveira
    Textão hein cara? mandou mto!!!! Dos poucos hoje com conteúdo bem denso e deep dive!
    • / ReplyRodrigo Ribeiro Gomes
      Hehehe! Valeu Raul. Este assunto realmente é meu favorito e me empolgo. Você pode deixar suas experências com o PostgreSQL pra gente mostrar que tudo que falaremos aqui, vale pra outros SGBDs também =)
  2. / ReplyJosé Diz
    Olá Rodrigo. Uma observação sobre termos que constam no artigo, em especial unidades e respectivos símbolos. Sempre que o nome de uma unidade de medida é derivada do nome de uma pessoa, o símbolo deve ser escrito em maiúscula. No caso de Hertz, o símbolo é Hz. O mesmo vale para MHz, GHz etc. Há uma linha de padronização que determinada que não há plural para unidades que derivam de nomes de pessoas: 1 Hertz, 2 Hertz, 1 Ampère, 2 Ampère etc. Se achar adequado, quando possível revise essa parte de unidades e respectivos símbolos. Da época em que eu realizava manutenção em microcomputadores aprendi que o fundamental em um computador é o chipset da placa-mãe. Ele é o maestro. Já vi processadores potentes instalados em placas-mãe que o chipset era uma porcaria. O cara gastava $$$ no processador e economizava no chipset; o resultado final era um computador deficiente. Com o tempo aprendi que a primeira característica a analisar na aquisição de uma placa-mãe é o chipset; o processador pode ser trocado, o chipset não. Este é um comentário para você; não precisa publicá-lo, ok?
    • / ReplyRodrigo Ribeiro Gomes
      Oi José! Muito obrigado por complementar este post. Já fiz as correções, e tomarei a liberdade de publicar o seu comentário, e deixar os seus devidos créditos por ter notado isso. Essas regras do SI são importantes, e manter o padrão também. Em relação ao chipset... cara... esse é um debate longo. Eu realmente estarei focando apenas na variável processador e velocidade do mesmo. Realmente, temos muitos outros fatores que influenciam. Por exemplo, antes mesmo da velocidade do bus do chipset entrar na história, temos a velocidade dos próprios registradores e cache da CPU, que já contribuem para deixarmos de explirar todo o potencial de nossos processadores... Por apenas uma questão de foco no assunto de CPU, vou sacrificar esse assunto extremamente empolgante... Mas ainda sim, eu vou conseguir mostrar uns exemplos bem legais envolvendo a CPU e como a velocidade da CPU pode afetar tanto uma query. De qualquer maneira, tudo que você disse é muito pertinente, e, já imagino próximos posts abordando isso! Estou animado para elaborar testes que demonstram isso! Um abraço!

Leave a Reply