Como posso determinar quantas IOPs são necessárias para meu banco de dados da AWS RDS?

14

Estou migrando parte de um banco de dados mysql para a AWS. Os dados em questão são de 99% de gravação e cada linha possui cerca de 1k de campos varchar, um datetime e 4 ints.

Estimo que precisaremos entre 20 a 25k registros inseridos / hora durante os horários de pico.

Eu executei o iostat -h no banco de dados atual e ele relatou cerca de 40 tps.

Como faço para descobrir que tipo de IOPS vou precisar?

chris
fonte

Respostas:

11

Você terá que testá-lo.

Você pode fazer alguns cálculos no verso do envelope para aproximar o número de E / S por inserção, multiplicá-lo pelo número de transações por segundo, adicionar alguma sala de buffer etc., mas é muito mais fácil testá-lo.

A coisa mais fácil a fazer é alocar o melhor palpite e, em seguida, voltar e aumentá-lo ou diminuí-lo para combinar com os testes do mundo real. Esse é um dos luxos do uso de um ambiente baseado em nuvem, as alterações de hardware são baixas em custos de capital e, geralmente, requerem apenas atualizações de configuração. Com os volumes EBS, você não pode apenas aumentar o número de IOPS, mas também aumentar o tamanho do volume 1 . Você sempre pode criar um novo volume e copiar seus dados. Haverá algum tempo de inatividade, mas se os dados não forem grandes , não deve ser tanto quanto seria uma cópia bruta.

Aqui está um palpite sobre o número de E / S necessárias. Novamente, é apenas um palpite, já que os detalhes dependem do número de índices e se o seu fluxo de tráfego será suave ou pontudo. A 25K tx / hora, você tem ~ 7 tx / s. O tamanho de cada linha não é particularmente relevante, pois é menor que o tamanho de uma única E / S (4K). Cada transação fará algo entre 1 a 5 IOP (inserção primária mais algumas inserções na árvore de índice), então digamos ~ 35 / s.

Eu digo que comece com o mínimo de 100 IOPS e aumente a escala, se necessário.

sehrope
fonte
1
Aliás, como acompanhamento: montamos um banco de dados de 300 GB e isso significou um mínimo de 1000 IOPS. Após cerca de 6 meses no RDS, tivemos 0 incidentes devido a problemas de E / S. Provavelmente um exagero, mas o mais próximo possível do fogo e esqueça.
Chris28 /
Com base na sua carga - você não precisa de IOPs provisionadas. A menos que você precise de mais de 2500-3500 IOPs totais, o armazenamento padrão será de 300 GB (por causa da distribuição do EBS).
7774 Ross
7

Eu usei a ferramenta básica iostat (iostat -h) para ter uma idéia de quantos iops eu estava usando no momento. A partir disso, extrapolei quanto usaria se tivesse menos de quatro vezes a quantidade de carga e seguisse com essa quantidade. Para mim, que resultou em 780 IOPS, fui com 800 IOPS.

Mark D
fonte
O iostat -h está relatando cerca de 40 tps, isso corresponde a 40 iops? Isso corresponderia aos números que o @sehrope calculou.
chris
1
Está correto.
Mark D
0

Eu uso o iostat para determinar a quantidade de IOPS que meu aplicativo está executando. O iostat relata isso como tps. KB / t ajuda a determinar se o valor da transferência é menor que o tamanho do bloco, 256 KiB. Eu executo o iostat com um tempo de espera de um segundo, ou seja, iostat -w 1.

Prof Mo
fonte