Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – Como aumentar a velocidade das suas consultas alterando a configuração de energia do servidor

Tempo de Leitura: 6 minutos

Fala pessoal!

Nesse post eu gostaria de compartilhar com vocês como aumentar a velocidade das suas consultas alterando a configuração de energia do servidor

Introdução

Se você acompanha a comunidade técnica de TI, especialmente de SQL Server, você certamente conhece o Fabrício Lima, CEO da PowerTuning e um dos pioneiros no que se refere à blog sobre SQL Server no Brasil.

Há alguns anos ele relatou um caso bem interessante no artigo “Casos do Dia a Dia: Comprei um servidor melhor e o SQL Server está mais lento! Como pode???” onde um cliente compra um servidor muito melhor que o anterior e as consultas acabam ficando bem mais lentas do que no servidor antigo por conta do plano de energia do Windows.

Desde então, sempre analiso isso quando vou acessar um novo ambiente. Apesar de acreditar em todas as referências que ele cita no post dele (e também acredito nele kkkk), eu queria testar isso no meu próprio ambiente e tirar minhas conclusões sobre isso.

O ambiente de testes

Para a realização dos testes desse post, utilizarei a seguinte tabela:

A consulta que utilizarei para testar a performance em planos de energia diferentes será essa:

A ferramenta que utilizarei para executar várias consultas simultaneamente e medir os tempos de execução, é a SQLQueryStress, a qual já falei sobre ela no artigo SQL Server – Como utilizar a ferramenta SQLQueryStress.

Para gerenciar os meus planos de energia, ativar/desativar o Turbo Boost e gerenciar as frequências do meu processador, utilizo a ferramenta Quick CPU, que acho a melhor disponível para Windows para gerenciamento de processador.

E por fim, o processador utilizado nesse teste é um Intel i9 9900K de 8 núcleos e 16 cores lógicos, com Turbo Boost 2.0 habilitado, onde defini uma frequência máxima de até 4.7 GHz.

Os Testes

Utilizando a ferramenta SQLQueryStress, vou executar a consulta que compartilhei acima (que força usar todos os 16 cores) em 10 iterações, executando 2 vezes simultaneamente em cada iteração.

Adicionei um tempo de espera de 2 segundos entre cada consulta, para deixar o processador “descansar” e reduzir o clock.

E o resultado foi esse aqui:

Utilizando o plano de energia Economia de Energia:
59.21 segundos de duração total, 3.91 segundos de tempo médio de execução e 18.5 segundos de CPU (paralelismo) em cada iteração

Utilizando o plano de energia Alta Performance:
43.64 segundos de duração total, 2.33 segundos de tempo médio de execução e 10.56 segundos de CPU (paralelismo) em cada iteração

Como puderam observar, no plano de energia Alta Performance, tivemos uma redução na duração total de 21%, redução no tempo médio de execução de 40.4% e redução no tempo de CPU de 43%.

O que está acontecendo?

Para tentar entender o que pode estar causando essa diferença tão absurda de performance devido a uma simples configuração do plano de energia do Windows, vamos entender como esses planos de energia funcionam. Segundo a documentação oficial, temos 3 planos de energia por padrão no Windows:

  • Equilibrado: Esse plano oferece desempenho total quando você realmente precisa. Esse plano economiza energia durante períodos de inatividade.
  • Economia de energia: Esse plano economiza energia reduzindo o desempenho do sistema. Ele pode ajudar os usuários de PC móveis a tirarem o máximo de proveito de uma única carga de bateria.
  • Alto desempenho: Esse plano maximiza a capacidade de resposta e o desempenho do sistema. Os usuários de PCs móveis podem perceber que a carga da bateria não dura tanto tempo quando eles utilizam esse plano.

Para entender exatamente o que esses planos de energia do Windows tem de diferente um do outro, podemos visualizar as configurações avançadas de cada plano de energia:

Economia de Energia (uso mínimo de CPU em 5%, uso máximo em 100% e resfriamento passivo)

Balanceado (uso mínimo de CPU em 5%, uso máximo em 100% e resfriamento ativo)

Alta Performance (uso mínimo de CPU em 100%, uso máximo em 100% e resfriamento ativo)

Como podemos observar, a maior diferença é com relação ao resfriamento (ativo/passivo) e o uso mínimo de CPU. Enquanto nos modos “Balanceado” e “Economia de Energia”, o uso mínimo é 5% e a frequência do clock da CPU ficará variando de 5% a 100% da capacidade máxima, conforme a utilização, no modo de energia “Alto Desempenho”, o Windows irá sempre utilizar o máximo da capacidade de CPU todo o tempo.

Nos modos de energia “Balanceado” e “Economia de Energia”, se o servidor de banco possui períodos onde tem pouca atividade e de repente ele recebe algumas consultas pesadas, ele acabará tendo que subir a velocidade do processador quando essa consulta pesada chegar e logo após executar, reduzirá o clock automaticamente para economizar energia.

Nos meus testes com o Turbo Boost habilitado, o plano de energia “Economia de Energia” só subiu a frequência do processador até o máximo nominal do processador (3.6 GHz) e atingiu mínimas de 1.4 GHz. O plano de energia “Balanceado” atingiu 4.7 GHz quando executei algumas consultas e após executar, ficou variando entre 3.5 GHz e 4.5 GHz. No plano “Alto Desempenho” o clock ficou variando entre 4.5 e 4.7 GHz.

E isso que faz a diferença no “mundo real” quando se utiliza outro plano de energia que não o “Alto Desempenho”

Você também pode utilizar o Quick CPU para analisar com mais detalhes os planos de energia:

Importante: Lembre-se de conferir se a opção “Turbo Boost” está habilitada (se o seu processador for Intel), pois ela aumenta bastante a frequência do clock da CPU automaticamente, aumentando a velocidade das consultas. Esse recurso é nativo do processador e não é considerado overclock, pois é feito pelo próprio CPU, em conjunto com a placa mãe.

Como identificar e alterar o plano de energia atual

O jeito mais fácil de identificar e alterar o plano de energia atual é utilizando a tela de Escolha do plano de energia do Windows. Para abrir ela tela, abra a tela do Prompt do DOS ou a janela do Executar (Windows + R) e digitar isso:

Você também pode digitar “power plan” no menu Iniciar

Pode acessar as opções de energia pelo Painel de Controle também:

Ou mesmo, utilizando a ferramenta Quick CPU

Como identificar e alterar o plano de energia atual pelo SQL Server

Caso você não tenha acesso RDP ao servidor e precise identificar utilizando apenas o SQL Server, você pode utilizar a consulta abaixo:

Resultado:

E para alterar o plano de energia também pelo SQL Server (o usuário do serviço precisa ter permissão para isso), você pode utilizar o comando abaixo:

Referências

E é isso aí, pessoal!
Espero que tenham gostado desse post e até a próxima!