¿Cómo puedo determinar cuántos IOP necesito para mi base de datos de AWS RDS?

14

Estoy migrando parte de una base de datos mysql a AWS. Los datos en cuestión son 99% de escritura, y cada fila tiene aproximadamente 1k de campos varchar, una fecha y hora y 4 entradas.

Estimo que necesitaremos entre 20-25k registros insertados / hora durante las horas pico.

Ejecuté iostat -h en la base de datos actual, y reportó alrededor de 40 tps.

¿Cómo puedo averiguar qué tipo de IOPS necesitaré?

Chris
fuente

Respuestas:

11

Tendrás que probarlo.

Puede hacer algunos cálculos al reverso para aproximar el número de E / S por inserto, multiplicarlo por el número de transacciones por segundo, agregar un poco de espacio de protección, etc., pero es mucho más fácil probarlo.

Lo más fácil es asignar una mejor suposición, luego regresar y aumentarla o disminuirla para que coincida con las pruebas del mundo real. Este es uno de los lujos de usar un entorno basado en la nube, los cambios de hardware son bajos en costos de capital y tales cambios generalmente requieren solo actualizaciones de configuración. Con los volúmenes de EBS no solo puede aumentar la cantidad de IOPS, también debería aumentar el tamaño del volumen 1 . Siempre puede crear un nuevo volumen y copiar sus datos. Habrá algún tiempo de inactividad, pero si sus datos no son enormes, no debería ser mucho, ya que sería una copia sin procesar.

Aquí hay una conjetura sobre la cantidad de E / S necesarias. Una vez más, es solo una suposición, ya que los detalles dependen de la cantidad de índices y de si su flujo de tráfico será suave o puntiagudo. A 25K tx / hora tienes ~ 7 tx / seg. El tamaño de cada fila no es particularmente relevante ya que es menor que el tamaño de una sola E / S (4K). Cada transacción se realizará en algún lugar entre 1-5 IOP (inserción principal más un par de inserciones de árbol de índice) así que digamos ~ 35 / s.

Digo comenzar con el mínimo de 100 IOPS y ampliar si es necesario.

sehrope
fuente
1
Por cierto, como continuación de esto: configuramos una base de datos de 300 GB, y eso significó un mínimo de 1000 IOPS. Después de aproximadamente 6 meses en vivo en RDS, hemos tenido 0 incidentes debido a problemas de E / S. Probablemente exagere, pero tan cerca del fuego y olvídate como puedas.
Chris
Según su carga, no necesita IOP aprovisionados. A menos que necesite más de 2500-3500 IOP totales, el almacenamiento estándar funcionará a 300 GB (debido al trazado de bandas de EBS).
Ross
7

Utilicé la herramienta básica iostat (iostat -h) para tener una idea de cuántos iops estaba usando actualmente. A partir de eso extrapolé cuánto usaría si tuviera menos de 4 veces esa cantidad de carga y fui con esa cantidad. Para mí eso funcionó a 780 IOPS, así que fui con 800 IOPS.

Mark D
fuente
iostat -h informa alrededor de 40 tps, entonces, ¿corresponde a 40 ps? Eso coincidiría con los números que @sehrope calculó.
Chris
1
Eso es correcto.
Mark D
0

Uso iostat para determinar la cantidad de IOPS que realiza mi aplicación. iostat informa esto como tps. KB / t lo ayuda a determinar si el monto de la transferencia es menor que el tamaño del fragmento, 256 KiB. Ejecuto iostat con un tiempo de espera de un segundo, es decir, iostat -w 1.

Prof Mo
fuente