Quais são as práticas recomendadas para executar o SQL Server em uma máquina virtual?

21

Quais são as práticas recomendadas para executar o SQL Server em uma máquina virtual? Minhas atividades de transação on-line são muito baixas, mas há uma grande quantidade de processamento de dados com o objetivo de fornecer dados de relatórios para vários sites.

JerryOL
fonte
2
Onde os discos estão sendo armazenados? em um disco rígido local de 5400 RPM? Em uma SAN com conexões de fibra e discos de eixo de 15k? Atualmente, todas as VMs são sobre E / S; a CPU é quase nada em consideração.
jcolebrand
Não, não local. Mas não conheço os detalhes da SAN.
JerryOL
2
Não posso adicionar comentários, pois ainda não tenho reputação suficiente, mas [de acordo com a Microsoft] [1] em 2008 R2, há pouca diferença de desempenho entre discos virtuais fixos e dinâmicos. [1]: blogs.msdn.com/b/tvoellm/archive/2009/08/05/…
Terry Bochaton 13/03/11
@Terry, no futuro, sinta-se à vontade para sinalizar essa resposta e nós a converteremos para você.
jcolebrand

Respostas:

18

Como nas máquinas físicas, o IO é o rei. Haverá um impacto perceptível de E / S na virtualização (a quantidade de acertos depende da tecnologia que você escolher), portanto, certifique-se de não fazer nada que possa agravar isso e prejudicar ainda mais o desempenho de E / S.

  • Sempre use tamanho fixo, não discos virtuais dinâmicos e garanta que as unidades / matrizes subjacentes sejam suficientes. Os vdisks dinâmicos têm menos desempenho que os de tamanho fixo.
  • Se os dados nas VMs não forem essenciais, ative a capacidade das soluções de VM de armazenar em cache gravações (mentindo efetivamente para o SO convidado sobre quando as coisas são fisicamente gravadas no disco) para obter desempenho extra. Isso é útil para uma máquina de desenvolvimento e teste em que os dados são facilmente substituídos ou réplicas somente leitura locais para o mestre que podem ser recriadas se houver algum problema, mas é recomendável que essas opções fiquem desativadas para os sistemas de produção e backup, como eles aumentam a chance de perda de dados (ou pior, corrupção) se a máquina desligar inesperadamente.
  • Certifique-se de que cada VM tenha RAM suficiente para que o conjunto de trabalho normal de cada banco de dados caiba na memória com bastante espaço de sobra para evitar E / S desnecessárias. Além disso, assegure-se de que o hypervisor não pagine a RAM das VMs a qualquer momento (por exemplo, a maioria dos produtos VMWare pode fazer isso, o que permite executar um conjunto maior de VMs do que você faria no mesmo hardware, mas a degradação do desempenho pode ser massivo - existe uma opção para ajustar ou desativar esse comportamento).
  • Se o host usa matrizes RAID5, considere mudar para RAID10. Isso reduzirá o espaço disponível, mas removerá os problemas de desempenho de gravação que podem ser aparentes com o RAID5 (ou 6).
  • Para VMs com probabilidade de ver muita atividade de E / S, considere fornecer a eles sua própria unidade ou matriz ou peça que compartilhem sua (s) unidade (s) / matriz (s) com dados com baixa atividade.

Obviamente, se todo o seu banco de dados (e tudo o mais que a VM estiver executando) couber na RAM alocada para a VM e houver muito pouca atividade de gravação, o desempenho de E / S poderá ser um problema muito menor.

Editar: mais alguns pontos:

  • Se estiver usando discos virtuais, verifique se o melhor tipo de controlador é usado para desempenho. Algumas soluções de virtualização oferecem vários tipos de controladores virtuais para melhor compatibilidade com os hóspedes e você pode achar que são menos eficientes do que outros devido a limitações de protocolo no design que estão emulando e limitações nos drivers do SO convidado.
  • Se sua solução de virtualização oferecer drivers específicos para o controlador da unidade virtual, verifique se o SO convidado os está usando - eles podem acelerar a E / S em massa, reduzindo o número de cópias de memória em memória e o contexto do convidado <-> hipervisor <-> convidado switches envolvidos em algumas operações.
  • Os dois pontos acima se aplicam se você estiver usando armazenamento em rede, como compartilhamentos SMB simples ou iSCSI: verifique se está usando o controlador de rede virtual mais eficiente em oferta e se o sistema operacional convidado está usando o driver recomendado, caso contrário, a latência e a largura de banda pode ser mais limitada do que a camada de virtualização precisa.
David Spillett
fonte
1
Bem, sim e não. Um volume SAN montado na VM por meio de um iniciador iSCSI será muito rápido!
Gaius
1
@ Gaio: bom ponto. Adicionei uma observação sobre vNICs e drivers, que provavelmente serão a fonte de gargalos extras nesses casos.
precisa
9

Aqui é um bom lugar para começar: http://www.brentozar.com/sql/virtualization-best-practices/ e http://sqlskills.com/blogs/brent/category/Virtualization.aspx

Eric Humphrey - lotes de ajuda
fonte
1
~ Há partes que você queira destacar nos artigos?
jcolebrand
2
Não. Como a virtualização pode ser um tópico complexo, aconselho a ler tudo. Não é tanto assim. Se o OP estiver procurando uma resposta rápida, provavelmente não será a resposta correta.
Eric Humphrey - lotsahelp
Eu estava atrás das melhores práticas em geral. Tendo acabado de mover o SQLServer 2000 Standard para uma nova VM, estou tentando resolver problemas com sites que chamam procedimentos armazenados que agora atingem o tempo limite, se não estiverem armazenados em cache na memória; mesmo que a memória física e a VM atribuída sejam iguais, 4 GB.
JerryOL
1
@JerryOL: verifique se a RAM alocada para a VM não pode ser paginada (caso contrário, alocar 4Gb para a VM não é o mesmo que ter 4 GB na máquina física) e se a solução de virtualização usada oferece diferentes tipos de controladores virtuais garante que o melhor seja escolhido e o driver correto seja usado pelo sistema operacional convidado.
precisa