Estou migrando parte de um banco de dados mysql para a AWS. Os dados em questão são 99% write, e cada linha tem cerca de 1k de campos varchar, um datetime e 4 ints.
Eu estimo que precisaremos de 20 a 25 mil registros inseridos/hora durante os horários de pico.
Executei iostat -h no banco de dados atual e relatou cerca de 40 tps.
Como descubro que tipo de IOPS vou precisar?
Você terá que testá-lo.
Você poderia fazer alguns cálculos de volta do envelope para aproximar o número de I/Os por inserção, multiplicá-lo pelo número de transações por segundo, adicionar algum espaço de buffer etc, mas é muito mais fácil apenas testá-lo.
A coisa mais fácil a fazer é alocar um melhor palpite, depois voltar e aumentá-lo ou diminuí-lo para corresponder ao seu teste no mundo real. Este é um dos luxos de usar um ambiente baseado em nuvem, as alterações de hardware são de baixo custo de capital e essas alterações geralmente exigem apenas atualizações de configuração. Com os volumes do 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 seus dados não forem enormes , não deve ser muito, pois seria uma cópia bruta.
Aqui está uma estimativa do número de E/S necessárias. Novamente, é apenas um palpite, pois os detalhes dependem do número de índices e se o fluxo de tráfego será suave ou pontiagudo. A 25 mil 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-5 IOP (inserção primária mais algumas inserções de árvore de índice), então digamos ~35/s.
Eu digo começar com o mínimo de 100 IOPS e aumentar se necessário.
Usei a ferramenta básica iostat (iostat -h) para ter uma ideia de quantos iops eu estava usando atualmente. A partir disso, extrapolei quanto eu usaria se tivesse menos de 4 vezes essa quantidade de carga e fui com essa quantidade. Para mim, isso funcionou para 780 IOPS, então fui com 800 IOPS.
Eu uso o iostat para determinar a quantidade de IOPS que meu aplicativo está executando. 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 corro o iostat com um tempo de espera de um segundo, ou seja, iostat -w 1.