Por que o SQL está excedendo 50% da CPU na minha instância EC2 c1.medium?

1

Sou novo na AWS, então acho que essa pode ser uma pergunta muito simples:

Estou usando uma instância EC2 t1.micro como meu servidor SQL DB para algumas análises em pequena escala que estou fazendo (Windows, SQL Express 2008). Tudo estava indo bem até que recentemente tive uma enorme consulta SQL que estava maximizando a pobre CPU na micro instância e demorando muito para ser executada. Vendo que o gargalo era a CPU, eu atualizo para uma instância de "Alta CPU" (c1.medium), que tem 5 unidades de computação EC2 (2 núcleos x 2,5 unidades de computação cada). Eu iniciei um teste da consulta novamente, ele foi executado muito mais rápido e eu comecei com alegria a consulta completa com uso intenso da CPU.

Quando eu verifico o Monitor de Recursos para ver como meu novo hardware está funcionando, vejo que o processo sqlservr.exe está usando apenas 50% da CPU, e o serviço MSSQLSERVER está usando exatamente 50%. Na micro instância, estava usando 100%. Estou simplificando um pouco as coisas, assumindo que o gargalo é uniformemente a CPU, mas parece que o SQL deveria estar empurrando a CPU para 100% para processar a consulta mais rapidamente (e exatamente 50% parece suspeito).

Minha pergunta é: por que a CPU está em 50%? Tem algo a ver com os 2 núcleos? Preciso fazer alguma coisa para permitir que o SQL tenha o uso total do poder de computação pelo qual estou pagando? Ou o SQL está usando todo o poder de computação possível e estou interpretando mal o que estou vendo no Monitor de Recursos?

    
por Mike Monteiro 15.08.2012 / 20:05

1 resposta

4

Sim, 50% significa que está usando apenas um núcleo.

(EDIT: substituiu a resposta sobre a afinidade da CPU com a resposta sobre o SQL Express sendo limitado a uma CPU).

Isso ocorre porque o MSSQL vê cada vCPU como uma CPU, em vez de um núcleo, e o MSSQL Server Express é limitado para uso em apenas uma CPU. Então, deixar o SQL usar todo o poder de processamento pelo qual você está pagando exigirá o uso de uma versão diferente do MSSQL ou de uma implementação SQL diferente (como o MySQL ou algo semelhante).

    
por 15.08.2012 / 20:09