Estoy usando python, usando el conector MySQL. Tengo casi 67 millones (14 GB) de entradas en una tabla. Cuando hago una inserción masiva de datos de 2K cada vez, la inserción tarda mucho.
Inserted 2000 rows in 23 Seconds Inserted 2000 rows in 25 Seconds Inserted 2000 rows in 29 Seconds Inserted 2000 rows in 28 SecondsPara otra tabla (que tenga menos datos), la velocidad de inserción está bien (2-4 segundos).
Después de usar la transacción:
Inserted 2000 rows in 21 Seconds Inserted 2000 rows in 20 Seconds Inserted 2000 rows in 20 Seconds Inserted 2000 rows in 18 Seconds¿Cómo puedo mejorar la velocidad?
Estoy usando AWS RDS, Aurora MySQL versión 5.7.12 (db.t3.medium) con un uso de CPU del 4 % al 8 %. Mi objetivo es insertar alrededor de 50K datos en una tabla. Esta tabla actualmente tiene casi 67 millones (14 GB) de datos. Los datos deben insertarse lo antes posible. Estos datos casi en tiempo real son muy importantes para el cliente. La tabla tiene 18 columnas: id (incremento automático de PK), cliente, número de serie, lote, datos y algunos otros. Los índices están activados (cliente, número_de_serie) - Para que la combinación sea única, lote - Para la búsqueda, datos (únicos). Todos están indexados por BTREE por defecto. Esta inserción debería tomar menos de 1 minuto para 50K. Pero actualmente toma alrededor de 15 minutos. He intentado insertar en una mesa vacía. Está insertando datos de 50K solo en 5-7 segundos. A medida que aumenta el número de entradas en la tabla, el tiempo del proceso de inserción aumenta.
¿La actualización de la versión de MySQL acelerará el proceso de inserción de todos modos? ¿Es la última opción dividir o particionar la tabla? No puedo consolidar los datos porque cada dato es importante, especialmente los últimos 2 años de datos. Por favor ayuda.
El esquema de mi tabla ya tiene algunos valores predeterminados en 8 columnas y estos datos nunca se actualizarán más tarde porque los datos en tiempo real son muy importantes para nosotros. No hay muchas operaciones de lectura/escritura en curso. Casi 2 o, en algunos casos, 3 selecciones por segundo según muestra el monitor RDS.
No soy un experto en MySQL, pero aquí hay algunas estrategias que puede probar
He tenido el mismo problema con el comando ACTUALIZAR: parte del retraso puede atribuirse a los problemas de velocidad intrínsecos de Python, pero es probable que se deba a mySQL y a las latencias generales del servidor.
Me he vuelto "sin servidor" usando SQLite (base de datos local, todo en "núcleo") y ha mejorado el rendimiento.
Dependiendo de cuál sea su objetivo, hay varias opciones que puede considerar. Más información en última instancia, es útil.
Si simplemente está buscando liberar disponibilidad, puede considerar usar INSERT LOW PRIORITY
https://dev.mysql.com/doc/refman/5.7/en/insert.html
¿Qué tipo de motor de base de datos está utilizando?
¿Qué índices tienes sobre la mesa? ¿Índices únicos?
¿Es posible insertar las filas con valores predeterminados y ejecutar actualizaciones más tarde de forma asincrónica?
¿Hay muchas operaciones de escritura/lectura en esa tabla al mismo tiempo?