Escrevi um aplicativo há alguns meses e o estava hospedando em nossos escritórios em uma estação de trabalho com Intel Core 2 Quad Q8200 a 2,33 GHz, 8 GB de RAM, Windows Server 2008 Enterprise e SQL Server 2008 Enterprise. Tanto o servidor web quanto o servidor de banco de dados foram executados na mesma máquina.
Tivemos um grande fluxo de tráfego, mudamos o ClubUptime.com e obtivemos duas de suas principais VMs do Windows. O servidor de banco de dados executa o Windows 2008 R2 Standard e o SQL Server 2008 R2 Web em 8 GB de RAM e um Intel Xeon e5620 a 2,40 GHz.
Desde a mudança, o banco de dados que costumava rodar com cerca de 400 MB de RAM agora roda entre 4 e 7 GB e não houve nenhuma alteração nele (além de algumas colunas aqui e ali). Nosso tráfego quadruplicou e nosso banco de dados tem 6 GB em disco, por que o SQL Server ocuparia 7 GB se o banco de dados tivesse apenas 6. E por que estaria armazenando TODO o banco de dados na memória?
Outra coisa é por que crescer 4 vezes em tamanho fez com que o consumo de memória do banco de dados crescesse 12 vezes?
Última pergunta: Por que a CPU está em 100% agora, onde não acontecia antes? O design é simples, MUITO poucas junções, SEM subconsultas. Estou perdido, a menos que seja a edição do SQL Server ou o fato de ter mudado de hardware real para uma VM.
Responder1
O SQL Server usará o máximo de memória possível, para que eu não perca muito sono devido ao consumo de memória, a menos que haja outros problemas. Se puder, armazenará tudo, a RAM é sempre mais rápida que o disco e se não estiver sendo usada para mais nada, por que não?
A execução do SQL em uma VM pode ser problemática. Funciona bem, mas há problemas de desempenho com a virtualização e, como muitas pessoas comentaram aqui, o SQL é afetado por isso de forma mais significativa do que a maioria dos outros aplicativos. Depende muito da sua instância de VM também - se o hipervisor for um host VMware vSphere, ele terá melhor desempenho com recursos reais equivalentes que o Xen, se for apoiado por Hyper-V e as taxas de contenção forem baixas (como em muito, muito poucas VMs). no host), então pode ser muito bom. Os únicos sistemas que tive que desvirtualizar foram todos servidores SQL.
Você não especifica quantas CPUs virtuais eles estão fornecendo para sua VM. Duvido muito que você esteja obtendo todos os 8 núcleos que o Xeon 5620 pode apresentar a uma VM. Mesmo se você estiver, isso pode não ser o ideal. No geral, uma VM com 4 vCPUs nessa plataforma deve ser capaz de corresponder à sua plataforma física anterior, assumindo que o Xeon 5620 tem cerca de 30% melhor clock por clock do que o Core 2 Quad de onde você veio, mas se isso realmente acontece depende do hipervisor subjacente, o configuração do sistema host e quanta contenção existe de outras VMs hospedadas no mesmo hipervisor.
Geralmente, você não pode confiar nos contadores de desempenho de uma VM ou, pelo menos, não pode confiar que eles lhe contarão tudo. Você realmente precisa ter uma visão do desempenho da perspectiva do hipervisor para saber se sua VM realmente está atingindo 100% da capacidade das CPUs reais do sistema.