Quais são as desvantagens de executar um banco de dados dentro de uma máquina virtual? Como os supero? [fechadas]

66

A execução de qualquer coisa dentro de uma máquina virtual terá algum nível de desempenho, mas quanto isso realmente afeta o desempenho de um sistema de banco de dados?

Encontrei este artigo de referência acadêmica com algumas referências interessantes, mas era um teste limitado usando apenas o Xen e o PostgreSQL. A conclusão foi que o uso de uma VM "não tem um alto custo de desempenho" (embora você possa pensar que os dados reais dizem o contrário).

Quais são as desvantagens técnicas, administrativas e outras associadas à execução de um banco de dados em uma máquina virtual?

Por favor, poste respostas que possam ser apoiadas por fatos objetivos, não estou interessado em especulações ou qualquer outro argumento semi-religioso (a paixão nerd é boa de várias maneiras, mas isso não vai nos ajudar aqui).

Dito isto,

  • Quais problemas aparecem ao executar o banco de dados em uma máquina virtual? (por favor, poste referências)
  • Essas questões são significativas?
    • Eles são significativos apenas em certos cenários?
  • Quais são as soluções alternativas?
Russ
fonte
+1 Estou interessado principalmente no gabarito ouvir sobre SQL Server e Windows 2008 R2 cenários
goodguys_activate
4
@ Shane Madden - Você pode explicar um pouco o fechamento? Espero que a motivação tenha sido motivada por uma resposta inespecífica (que depois foi descarrilada nos comentários), não pela pergunta em si. Com relação à pergunta, 44 votos e 12 favoritos, aproximadamente um dia após a existência do pré-fechamento, implica para mim que era uma boa pergunta com respostas / informações úteis (especialmente em comparação com o que parece ser típico para o tráfego de perguntas do ServerFault). É para isso que os vários sites da SE estão buscando. Você preferiria uma pergunta mais específica ao invés de "quão ruim é?".
61111 Russ
11
@ErikA, Shane, Womble, mikeyb, Ben - fiz uma edição da comunidade que pode tornar essa pergunta mais construtiva. Considere reabrir isso ou postar uma pergunta semelhante em uma pergunta nova / limpa.
goodguys_activate

Respostas:

41

Embora muitos fornecedores de banco de dados tenham demorado muito para fazer isso, quase todos agora oferecem suporte oficial ao software em execução em um ambiente virtualizado.

Nós executamos muitas instâncias do Oracle 11g no linux sobre o ESXi, e certamente é possível obter um desempenho muito bom. Como em todo o dimensionamento de hardware, você só precisa garantir que o host de virtualização possua muitos recursos (RAM, CPU) e que sua camada de disco esteja pronta para a tarefa de fornecer o desempenho de E / S necessário.

EEAA
fonte
7
+1 Como observado, é essencial que os recursos estejam à altura da tarefa. O disco tem sido o grande gargalo para nós e é necessário um planejamento cuidadoso.
Dave M
2
+1 Você precisa fazer sua lição de casa sobre o uso do banco de dados com antecedência. Se sua caixa física estiver sendo martelada acima de 40% de utilização, então suas vantagens em movê-la começarão a se dissolver. Dito isto, temos toneladas de pequenos sql isolados específicos de aplicativos em execução em vm sem nenhum problema. Mas nossas grandes máquinas de uso pesado têm hardware dedicado por causa da falta de vantagem.
Nate
5
Definitivamente, o Disk IO é o grande culpado, e em que ambientes virtualizados tendem a ser esquisitos.
Lynxman
11
@lynxman - Concordou. Executamos todas as nossas instâncias Oracle em nossos discos SAN de camada 1, que são 15k SAS. Pelo que sei, chegamos muito perto do desempenho quase nativo.
EEAA
10
"Um grama de teste vale um quilo de palpite."
Chris B. Behrens
21

Como diz ErikA, isso está se tornando cada vez mais comum. Estou no campo do SQL Server e pessoalmente não tenho sistemas de produção em execução nas VMs, mas não hesitaria em fazê-lo (depois de um pouco mais de estudo sobre o assunto). Definitivamente, há algumas coisas a serem levadas em consideração antes de você seguir esse caminho (pelo menos no SQL Server). E / S de disco (como outros já mencionaram) e alocação de memória são apenas 2 exemplos. As coisas também serão diferentes entre os hipervisores diferentes.

Brent Ozar é um especialista reconhecido em virtualizar o SQL Server, especificamente no VMWare. Eu recomendo a leitura de seu material.

http://www.brentozar.com/community/virtualization-best-practices/

squillman
fonte
11

lata e depois há que deve . Uma corveta pode percorrer 250 km / h, mas você deveria em rodovias públicas? Você pode se machucar desnecessariamente.

Bancos de dados são sistemas operacionais convidados. Por design, quando iniciam, eles agarram blocos de um recurso e o gerenciam diretamente por motivos de desempenho. Assim que você tornar o sistema operacional principal do servidor de banco de dados um convidado no ambiente de hospedagem virtualizado, estará colocando uma camada de arbitragem com o hipervisor entre o elemento alocado em bloco do disco e a RAM e o servidor de banco de dados. Vai diminuir a velocidade. Quanto mais ineficientes forem suas consultas, mais ela diminuirá. Hoje, essas ineficiências podem ser mascaradas em hardware dedicado, mas assim que você introduzir a arbitragem no seu recurso dependente, descobrirá rapidamente.

O que muitos contadores de bean que exigem virtualização não conseguem reconhecer é que os servidores de banco de dados, como sistemas operacionais convidados, oferecem sua própria camada de consolidação. Não há razão para que você não consiga mover várias instâncias de banco de dados lógicas em um servidor físico, mesmo a ponto de mover endereços IP, configurar nomes de host adicionais, etc ..., para permitir que esse coalescimento natural de serviços ocorra. E, com esse modelo, você não apenas retém a economia de custos que o gerenciamento está promovendo para um número reduzido de hosts físicos, mas também o acesso ao bloco de recursos físicos sem o impacto do hypervisor arbitrário, que pode tomar decisões benéficas às vezes e não outras.

O mesmo vale para outros sistemas operacionais convidados, como Java. As soluções de virtualização geralmente são ambientes ocupados e o hipervisor precisa tomar muitas decisões sobre quem "recebe o token" em um recurso. Sempre que você puder eliminar essa camada, ficará melhor.

Combine várias instâncias usando a camada do sistema operacional convidado natural primeiro. As probabilidades são de que você poderá atingir com mais facilidade os objetivos de consolidação e desempenho da plataforma.

James Pulley
fonte
4
Definição interessante de "sistema operacional convidado". Embora seu argumento seja levado em consideração em relação ao desempenho puro e não adulterado, com que frequência seus bancos de dados realmente engarrafam na CPU? É muito mais provável a E / S e, para aplicativos de maior desempenho, você já está compartilhando o tempo de E / S em uma SAN. Espero que você reconsidere sua filosofia de virtualização quando um problema de segurança com um aplicativo comprometer todos os hashes de senha dos bancos de dados consolidados ou quando um processo em execução na sua JVM consumir cada byte de espaço de heap disponível.
Shane Madden
5
Para deixar claro, eu concordo completamente que um servidor de banco de dados de alto desempenho, afinado, extremamente ocupado e com alto desempenho deve ter seu próprio hardware físico. Mas essas não são a norma, e os outros benefícios da virtualização tendem a superar o desempenho atingido, que é indistinguível da maioria das cargas de trabalho.
Shane Madden
3
Não concordo com o seu argumento sobre sempre ir primeiro às camadas de consolidação existentes. Às vezes isso faz sentido. Mas observe, por exemplo, a relação custo-benefício no reequilíbrio de recursos entre a consolidação de vários bancos de dados em um único sistema operacional e a consolidação de várias combinações de banco de dados / SO em cima de um hipervisor. O primeiro é mais eficiente. O segundo é muito mais fácil de reequilibrar. Migrar e OS / banco de dados para um novo host é muito menos perturbador do que migrar um banco de dados para um novo sistema operacional.
Jake Oshins
Meus comentários vêm de observações diretas em campo de migrações bem-sucedidas e com falha para soluções de virtualização na última década como engenheiro de desempenho. Existem muitos aplicativos de banco de dados ruins por aí, cujo uso promíscuo de hardware mascara problemas de desempenho. Adicione virtualização e esses problemas vêm à tona. Se você tiver um aplicativo que exija um relógio preciso para fins de tempo ou auditoria, com o relógio flutuando na virtualização de software, você estará fora da caçada.
James Pulley
11
Uau, apenas uau James. Não tenho tempo nem paciência para descartar todos os comentários que você fez na sua resposta e nos comentários subsequentes, mas senti que precisava deixar um comentário aqui para qualquer pessoa que possa ter essa resposta. As opiniões de James são, bem, próprias e não refletem o que é verdadeiramente possível. Se você está com excesso de inscrições, é claro que terá um desempenho ruim. Portanto, não exagere na inscrição. É perfeitamente possível ter um ambiente de virtualização de alto desempenho. É tolice fazer uma recomendação geral contra ela, porque "apresenta um mau desempenho".
EEAA
6

Há duas coisas a realizar aqui:

  • A unidade de desempenho do banco de dados por unidade de hardware é um pouco menor para um banco de dados virtualizado. Isso significa que você precisa comprar um pouco mais de hardware para obter o mesmo nível de desempenho.
  • Isso não significa que o mesmo nível ou um nível desejado de desempenho seja impossível. Os ganhos que você começa a partir de uma melhor gestão e outros benefícios (como o mais fácil HA), muitas vezes maneira mais do que compensou os marginalmente aumento dos custos de hardware.

Dito isto, onde trabalho nossa instalação do Sql Server é um dos dois únicos servidores que não tenho intenção de virtualizar tão cedo (o outro é o controlador de domínio primário).

Joel Coel
fonte
4

A execução do SQL Server é uma VM, tudo bem, desde que você possa fornecer recursos suficientes para a VM para executar seu aplicativo. Se no mundo físico você precisar de 24 núcleos e 256 Gigs de RAM, precisará fornecer 24 vCPUs e 256 Gigs de RAM no mundo virtual.

Acabei de escrever um artigo na revista SQL Server dos últimos meses sobre a execução do SQL Server no vSphere da VMware.

Mrdenny
fonte
2

Eu corro dois bancos de dados, um PostgreSQL e outro MySQL, em um ambiente virtual (Xen) onde os dom0s estão altamente disponíveis. Os sistemas de arquivos domU estão todos localizados em um iSCSI SAN LUN, dividido em volumes lógicos LVM2. O banco de dados MySQL é exclusivamente para Cacti e, portanto, não possui muita utilidade, e também está localizado no iSCSI LUN.

O banco de dados PostgreSQL é o banco de dados do nosso ambiente de teste e, portanto, possui uma utilização mais alta que o banco de dados MySQL. Por esse motivo, o banco de dados está localizado em um conjunto RAID10 local e o DRBD é replicado no segundo nó do cluster. No entanto, em termos de carga real, esse banco de dados temporário não vê carga muito alta. O que, na minha opinião, torna um bom / ótimo candidato para virtualizar.

Alguns dos benefícios para nossa organização foram o consumo reduzido de energia, economia de espaço em rack e menos sobrecarga administrativa de hardware.

Nosso principal banco de dados de produção, por outro lado, não consigo imaginar ficar virtual ....

Kendall
fonte
2

Eu trabalho com servidores MSSQL e MySQL em vários servidores. Alguns anos atrás, eu hesitava em começar a configurar servidores SQL em VMs porque tinha ouvido falar sobre os problemas de desempenho da execução de um servidor SQL em uma VM. No entanto, fiquei surpreso depois de configurar meus primeiros servidores SQL e não vi nenhuma alteração no desempenho. Mais e mais servidores nos quais trabalho estão em VM e quase todos os clientes corporativos maiores em que trabalho têm virtualmente servidores SQL.

Sim, a VM adiciona algum custo adicional e, se você hospedar várias VMs em uma única caixa, precisará de um bom servidor robusto. Um problema comum de recursos a ser observado é adicionar VMs adicionais e diminuir os recursos disponíveis. É prática comum planejar algum crescimento, mas se você comprou seu servidor para hospedar 2 ou 3 VMs e agora está executando 10 VMs, provavelmente verá um impacto no desempenho.

Eu mentiria se dissesse que nunca vi problemas de desempenho executando um servidor SQL em uma VM. Mas aprendi que, se você estiver tendo um desempenho ruim, provavelmente há algo errado com o ambiente.

Chris
fonte