sql >> Base de Datos >  >> RDS >> Mysql

MySQL optimiza la velocidad de INSERT que se ralentiza debido a los índices

Si desea inserciones rápidas, lo primero que necesita es el hardware adecuado. Eso supone una cantidad suficiente de RAM, un SSD en lugar de unidades mecánicas y una CPU bastante potente.

Como usa InnoDB, lo que desea es optimizarlo, ya que la configuración predeterminada está diseñada para máquinas lentas y antiguas.

Aquí hay una excelente lectura sobre la configuración de InnoDB

Después de eso, necesita saber una cosa:cómo funcionan internamente las bases de datos, cómo funcionan los discos duros, etc. Simplificaré el mecanismo en la siguiente descripción:

Una transacción es MySQL esperando que el disco duro confirme que escribió los datos. Es por eso que las transacciones son lentas en las unidades mecánicas, pueden realizar entre 200 y 400 operaciones de entrada y salida por segundo. Traducido, eso significa que puede obtener 200 consultas de inserción por segundo usando InnoDB en una unidad mecánica. Naturalmente, esta es una explicación simplificada , solo para describir lo que está sucediendo, no es el mecanismo completo detrás de la transacción .

Dado que una consulta, especialmente la correspondiente al tamaño de su tabla, es relativamente pequeña en términos de bytes, está desperdiciando IOPS valiosos en una sola consulta.

Si envuelve varias consultas (100 o 200 o más, no hay un número exacto, debe probar) en una sola transacción y luego la confirma, obtendrá instantáneamente más escrituras por segundo.

Los muchachos de Percona están logrando 15k inserciones por segundo en un hardware relativamente barato. Incluso 5k inserta un segundo no está mal. La tabla como la suya es pequeña, hice pruebas en una tabla similar (3 columnas más) y logré llegar a mil millones de registros sin problemas notables, usando una máquina de 16 gb de ram con un SSD de 240 GB (1 unidad, sin RAID, utilizado con fines de prueba).

TL; DR:- siga el enlace de arriba, configure su servidor, obtenga un SSD, envuelva múltiples inserciones en 1 transacción y obtenga ganancias. Y no desactive la indexación y luego la active, no es aplicable siempre, porque en algún momento gastará tiempo de procesamiento y IO para construirlos.