SQL Server de núcleo único na VM

7

Recentemente, nosso distrito escolar atualizou vários servidores da versão 2005 para 2016 e de servidores físicos para servidores VM.

Nossa equipe de infraestrutura apresentou os servidores VM para instalação do SQL Server com um único núcleo.

Estou tentando explicar ao chefe desse departamento que o SQL Server 'odeia' estar em um único núcleo e ele quer ver 'prova'. Nenhum dos dados que apresentei atendeu a sua necessidade de prova e, portanto, ele pediu alguns artigos sobre por que um VM SQL Server não funcionará com eficiência em um único núcleo.

Quais artigos você usa para isso?

Qualquer ajuda para mim fazer o meu caso seria apreciada!

Deb
fonte
7
Ao licenciar o SQL em uma VM, você paga dois pacotes de licenças de qualquer maneira. Você está jogando dinheiro fora, não dando a ele pelo menos dois núcleos, mesmo se você receber um desconto educacional.
Erik Darling
4
Você pode consultar o artigo de Glenn Barry (Microsoft MVP com mais de 10 anos) de 2015, que lista as CPUs recomendadas para o SQL 2014, das quais a menor possui seis núcleos.
LowlyDBA
2
Além disso, um tempo atrás, escrevi um white paper para o Google sobre o dimensionamento de VMs na nuvem. Você também pode aplicá-lo no local.
Erik Darling
Expandindo o comentário @sp_BlitzErik, as licenças principais mínimas que podem ser aplicadas a um único SQL Server, seja VM ou físico, são 4 licenças (consulte o Guia de Licenciamento ). A alternativa é licenciar os núcleos físicos do host. Sob esse modelo, você é livre para executar quantas VMs com quantos vCores quiser.
Mark Storey-Smith

Respostas:

11

Qualquer processo que não seja do SQL Server que consome CPU pode fazer com que todo o SQL Server seja completamente inutilizável.

Como exemplo, o Windows Update interromperá o SQL Server enquanto descompacta assemblies .Net.

Qualquer processo antivírus, mesmo que esteja configurado para excluir arquivos e pastas de dados do SQL Server, pode deixar de responder ao SQL Server enquanto verifica os arquivos e descompacta os arquivos de definição de vírus atualizados.

Se você tiver algum software de gerenciamento instalado, como o IBM Tivoli Server Monitor, e ele decidir usar 100% de um núcleo, provavelmente não poderá fazer nada além de desligar a máquina a frio. Não me pergunte por que estou falando disso.

Eu poderia continuar, mas basta dizer que qualquer servidor com um único núcleo está simplesmente pedindo problemas com desempenho e capacidade de gerenciamento. Verifique se qualquer computador com um único núcleo deve ser considerado inutilizável hoje. Caramba, meu telefone tem 8 núcleos.

Enquanto isso, convença o pessoal da virtualização a dar a cada SQL Server uma reserva de memória razoável que garantirá que a memória do SQL Server não seja paginada da memória principal do host para o disco.

Para servidores SQL sérios hospedados pela VMware, você deve configurar o VMware de acordo com o guia Arquitetando o SQL Server no VMware Best Practices .

Realmente, tudo se resume a uma VM de núcleo único, que só pode executar um único encadeamento a qualquer momento. A virtualização não é uma bala de prata para essa situação de um núcleo por segmento.

Os pontos acima levam em conta que o Windows NT (a base de código de 1993 em que todas as versões modernas do Windows são construídas) utiliza multitarefas preemptivas. A multitarefa preemptiva permite que o sistema operacional aplique a multitarefa forçando a alternância de contexto em agendas regulares. Mesmo com a multitarefa preemptiva, um servidor com um único núcleo ainda sofrerá com um desempenho muito ruim se uma única tarefa decidir usar o máximo de CPU possível, pois o sistema operacional dará a essa tarefa o tempo de CPU que puder ser poupado enquanto ainda permite a execução de tarefas de alta prioridade, forçando a CPU a 100%. Se o SQL Server estiver em execução no momento em que a CPU chegar a 100%, o quantum de CPU do SQL Server será reduzido a ponto de se tornar muito perceptível. Nos cenários acima descritos, eu não fizdigamos, a máquina (ou mesmo o SQL Server) "parará" ou "morrerá" completamente; isso seria simplesmente falso. No entanto, a máquina pode ficar tão ocupada que, para todos os efeitos, a máquina se torna inutilizável. Adicionar um segundo núcleo, embora certamente não seja uma panacéia, reduz a probabilidade de a máquina ficar completamente sem resposta. Cada núcleo adicional significa que outro encadeamento pode executar até 100% da CPU sem causar inutilização da máquina.

Max Vernon
fonte
O servidor Windows não possui (e sempre teve) multitarefas preventivas? A menos que eu esteja enganando o que você está descrevendo é multitarefa cooperativa, processos cedendo um ao outro quando eles realizam sua tarefa de alto nível. A disputa certa pode atrasar uma resposta, mas não deve interromper completamente as coisas. Concordo que o mutli-core é uma boa idéia, se não uma prática recomendada, mas o cenário do dia do juízo final que você apresenta não parece correto.
Mâtt Frëëman
Às vezes, também há um bom motivo para permanecer como núcleo único, se você já era físico e os aplicativos que conversam com sua instância de núcleo único quebraram as práticas recomendadas, como não especificar uma ordem de classificação, e consideraram que a ordem é implicitamente estável na ausência de tal a mudança para o multi-core pode mostrar bugs que foram suprimidos anteriormente pela natureza do single core. Se você não tiver o orçamento para fazer o controle de qualidade novamente desses aplicativos ou pouca fé nos desenvolvedores ou talvez eles já tenham ido, combinar servidores físicos existentes em termos de núcleos expostos às vezes pode ser uma aposta segura
Mâtt Frëëman
Oi @ MâttFrëëman - Adicionei uma seção à minha resposta sobre multitarefa preventiva. Você me lembrou de quão melhor a base de código do NT é comparada à multitarefa cooperativa baseada em DOS usada pela base de código original do Windows, incluindo o Windows ME, inclusive.
Max Mayon
Concordo com o seu grande parte do seu comentário sobre permanecer no núcleo único às vezes sendo um mal necessário. Minha resposta presume que as máquinas físicas que foram virtualizadas provavelmente eram servidores com vários núcleos, com base no desejo do OP de ter VMs com vários núcleos.
Max Mayon
@ MaxVernon Obrigado, é exatamente isso que precisávamos!
Deb
6

Eu tive que provar a mesma coisa antes. O que finalmente chegou à nossa equipe de planejamento de capacidade é que nossos bancos de dados estavam quase inutilizáveis ​​durante um backup.

Como DBA, seu maior medo deve ser a perda de dados. Se você não pode executar backups com confiança sem tomar ou causar uma interrupção, esse é um grande problema. Execute alguns testes para garantir que o desempenho seja afetado enquanto um backup estiver ocorrendo e explique que, com mais de um núcleo, o problema deve desaparecer.

Neghtasro
fonte
3
De fato, qualquer quantidade séria de E / S, independentemente do SQL Server ou não relacionada ao SQL Server, pode causar um problema.
Max Vernon
3
@MaxVernon Absolutamente: acabei de criar backups especificamente porque é um problema com o qual eu lidei antes (às 3 da manhã, natch), é fácil de provar e "não podemos fazer backups sem uma interrupção!" deve ser suficiente para estimular qualquer gerente de infraestrutura razoável a poupar um mísero núcleo.
Neghtasro
2

Para fornecer uma prova convincente de que seu servidor precisa de mais de uma CPU, você precisará fornecer informações sobre a carga de trabalho e as consultas que estão sendo executadas no servidor. Se ele tiver apenas um banco de dados com menos de 100 MB, por exemplo, e todas as consultas forem muito simples e eficientes, pode não haver quase nenhum benefício em ter mais núcleos.

Eu recomendo que você comece a capturar planos de consulta paralelos e o tempo que leva para serem concluídos. Isso demonstrará que a carga de trabalho em execução no sistema se beneficiará de ter várias CPUs.

Se já estiver em produção no ambiente da VM, você também precisará capturar dados de desempenho de uso da CPU. Se você puder mostrar que a CPU está atingindo o máximo de 100% por longos períodos, isso também forneceria boas evidências de que o sistema precisa de mais CPUs.

Tony Hinkle
fonte
5
Obviamente, não haverá planos paralelos em uma VM de núcleo único. Você precisaria capturar esses planos em uma caixa com mais de um núcleo.
Max Vernon
3
Para adicionar ao comentário de Max, se você procurar o XML do plano em um servidor com um único núcleo, verá NonParallelPlanReason="EstimatedDOPIsOne".
Erik Darling
@Tony já ter lhes forneceu alguns dados, mas foi dito que um único núcleo era uma prática recomendada com uma máquina VM. daí a minha necessidade de ajuda!
Deb
11
@Deb Oh meu - nunca ouvi falar dessa melhor prática! Eu posso ouvir o trombone triste de Brent Ozar até aqui. Eu ficaria preocupado com alguém que faça declarações como essa sendo responsável por uma infraestrutura de VM.
Tony Hinkle
@TonyHinkle - eu concordo. Uma VM de núcleo único nunca é uma boa ideia, deixe isolada uma "melhor prática". Ok, talvez 99.999% do tempo, em vez de "nunca": - /
Max Vernon
2

Talvez você deva perguntar a eles por que eles estão insistindo que seria uma boa ideia atribuir apenas um núcleo por VM do SQL Server.

Então, dependendo da resposta deles, você pode tentar convencê-los com base no item 3.3.2 neste link:

SqlServer-on-vmware-best-pratices

A VMware recomenda que, para o dimensionamento inicial, o número total de vCPUs atribuídos a todas as VMs não ultrapasse o número total de núcleos físicos

Se esse item não for o motivo da equipe de infraestrutura fornecer apenas 1 núcleo por VM, então, sem dúvida, o hardware está sendo desperdiçado.

Rogerlr
fonte
Não sabe como a cotação ajuda no caso de mais CPUs?
LowlyDBA
Sim, mas não está tão claro por que a equipe de infraestrutura não colocou mais cpus por VM.
Rogerlr