Como você carrega testes e planejamento de capacidade para bancos de dados?

34

Esta é uma pergunta canônica sobre o planejamento de capacidade para bancos de dados.

Palavras-chave:

Estou procurando criar uma questão canônica de ferramentas e métodos de planejamento de capacidade para bancos de dados. Esta é uma pergunta canônica.

Obviamente, o fluxo de trabalho geral é:

  • Coloque seu cenário no lugar
  • Adicionar monitoramento
  • Adicionar tráfego
  • Avaliar resultados
  • Corrigir com base nos resultados
  • Enxágüe, repita até razoavelmente feliz

Sinta-se à vontade para descrever diferentes ferramentas e técnicas para diferentes servidores da Web, estruturas, etc., bem como práticas recomendadas.

gWaldo
fonte
Um banco de dados quase nunca é um sistema autônomo. Isso pode ser visto no contexto principal de servidores de aplicativos, geralmente grandes, à sua frente. DBs são os dispositivos de dados de back-end. Portanto, ao testar a carga, você deve considerar isso.
Nils

Respostas:

24

Planejamento de capacidade de disco e RAM

Planejar a capacidade de disco e memória para um servidor de banco de dados é uma arte negra. Mais é melhor. Mais rápido é melhor.

Como diretrizes gerais, ofereço o seguinte:

  • Você deseja mais espaço em disco do que NUNCA precisará.
    Faça a sua melhor estimativa de quanto espaço em disco você precisará nos próximos 3 a 5 anos e, em seguida, duplique-o.
  • Você precisará de RAM suficiente para manter os índices do banco de dados na memória, manipular sua maior consulta pelo menos duas vezes e ainda ter espaço suficiente para um cache de disco do sistema operacional saudável.
    O tamanho do índice depende do seu banco de dados, e todo o resto depende muito do seu conjunto de dados e da estrutura de consulta / banco de dados. Oferecerei "Pelo menos duas vezes o tamanho da sua maior tabela" como sugestão, mas observe que essa sugestão se divide em operações realmente grandes de data warehousing em que a maior tabela pode ter dezenas ou centenas de gigabytes.

Todo fornecedor de banco de dados tem algumas instruções sobre o desempenho do ajuste do kernel do disco / memória / SO - passe algum tempo com esta documentação antes da implantação. Isso vai ajudar.


Benchmarking de carga de trabalho e planejamento de capacidade

Supondo que você não tenha implantado ainda ...

Muitos sistemas de banco de dados são fornecidos com as ferramentas de benchmarking - por exemplo, o PostgreSQL é fornecido com o pgBench .
Essas ferramentas devem ser sua primeira parada no desempenho do banco de dados de benchmarking. Se possível, você deve executá-los em todos os novos servidores de banco de dados para ter uma idéia de "quanto trabalho" o servidor de banco de dados pode fazer.

Armado agora com um benchmark bruto, ABSOLUTELY MEANINGLESSvamos considerar uma abordagem mais realista para o benchmarking: carregue seu esquema de banco de dados e escreva um programa que o preencha com dados fictícios, depois execute as consultas do seu aplicativo nesses dados.
Isso avalia três coisas importantes: 1. O servidor de banco de dados (hardware) 2. O servidor de banco de dados (software) 3. Seu design de banco de dados e como ele interage com (1) e (2) acima.

Observe que isso requer muito mais esforço do que simples benchmarks pré-criados, como pgBench: Você precisa escrever algum código para preencher, e pode precisar escrever um código para fazer as consultas e o tempo de execução do relatório.
Esse tipo de teste também é substancialmente mais preciso: como você está trabalhando com seu esquema e consultas, pode ver como eles serão executados e oferece a oportunidade de criar um perfil e melhorar seu banco de dados / consultas.

Os resultados desses benchmarks são uma visão idealizada do seu banco de dados. Para estar seguro, assuma que você alcançará apenas 50-70% desse desempenho em seu ambiente de produção (o restante é uma almofada que permitirá lidar com crescimento inesperado, falhas de hardware, alterações na carga de trabalho etc.).


É tarde demais! Está em produção!

Uma vez que seus sistemas estão em produção, é realmente muito tarde para fazer "benchmark" - você pode ativar o registro / tempo das consultas brevemente e ver quanto tempo as coisas demoram para executar, além de executar algumas consultas de "teste de estresse" em grandes conjuntos de dados durante o desligamento. horas. Você também pode examinar a utilização da CPU, RAM e E / S (largura de banda do disco) do sistema para ter uma idéia de quão pesado ele é carregado.
Infelizmente, tudo isso fará com que você tenha uma idéia do que o sistema está fazendo e um conceito vago de quão próximo da saturação está.
Isso nos leva a ...


Monitoramento contínuo

Todos os parâmetros de referência do mundo não o ajudarão se seu sistema estiver vendo de repente novos / diferentes padrões de uso.
Para implantações melhores ou piores do banco de dados, não é estático: seus desenvolvedores mudarão as coisas, seu conjunto de dados aumentará (eles nunca parecem encolher) e seus usuários de alguma forma criarão combinações insanas de eventos que você nunca previu em testes.

Para fazer um planejamento adequado da capacidade do seu banco de dados, você precisará implementar algum tipo de monitoramento de desempenho para alertá-lo quando o desempenho do banco de dados não estiver mais atendendo às suas expectativas. Nesse ponto, você pode considerar ações corretivas (novo hardware, esquema de banco de dados ou alterações de consulta para otimizar o uso de recursos, etc.).


Nota: Este é um guia genérico e de nível muito alto para dimensionar o hardware do banco de dados e descobrir quanto abuso pode ser necessário. Se você ainda não tiver certeza sobre como determinar se um sistema específico atende às suas necessidades, fale com um especialista em banco de dados.
Há também um site do Stack Exchange especificamente dedicado ao gerenciamento de banco de dados: dba.stackexchange.com . Pesquise o arquivo de perguntas ou navegue pelas tags específicas do mecanismo de banco de dados para obter mais conselhos sobre ajuste de desempenho.

voretaq7
fonte
11
Além disso, atualmente, você pode usar SSDs para operações de troca / disco. Isso acelerará as consultas que usam grandes tabelas temporárias nos discos. Portanto, adicionar mais SSDs geralmente é uma ideia muito boa.
Peter
2
@ Peter Eu não recomendaria SSDs para espaço de troca (se você estiver trocando ativamente, há uma taxa de rotatividade muito alta), embora com um SSD grande o suficiente e um bom desgaste no nivelamento do disco, possa durar a vida útil da máquina. Vi SSDs usados ​​para o espaço de tabela temporário com bons resultados.
precisa saber é o seguinte
11
Observe que este conselho nos comentários sobre SSDs agora tem 7 anos. Todo armazenamento que contém um banco de dados no servidor de banco de dados deve ser um SSD em 2019 ou posterior.
Mark Henderson
1

Geralmente você precisa de casos de uso realistas para testar o desempenho. Uma prática recomendada é envolver desenvolvedores de aplicativos e usuários finais.

Registre o que eles estão fazendo normalmente, parametrize-o (conteúdo, número de ações simultâneas) para cada caso de uso.

Então construa o lado do cliente. Uma única máquina física geralmente não é suficiente para aumentar a carga de produção.

Em seguida, ligue-o, avalie, aprimore e teste novamente.

Você ficará surpreso com o surgimento de gargalos.

Nils
fonte