Tengo un proceso de importación que se ejecuta de vez en cuando y quiero que sea un tipo de trato 'todo o nada', también conocido como: una transacción.
Hay muchos aspectos, y las importaciones pueden producir entre 100k-1mil + registros. Esto equivale a una carga útil que oscila entre varios MB y unos pocos cientos de MB de datos.
Sé que las tablas temporales son otra opción, pero este método parece muy útil.
¿Hay alguna advertencia a tener en cuenta con respecto a este tipo de práctica con una gran cantidad de manipulación de datos entre confirmaciones? (Fuera de la ráfaga de carga de escritura / indexación típica una vez confirmada)
mysql
innodb
mysql-5.5
transaction
hielo delgado
fuente
fuente
Respuestas:
Un cuello de botella a tener en cuenta es el InnoDB Log Buffer. Innodb_log_buffer_size establece el tamaño . Esto es lo que dice la documentación de MySQL al respecto:
El InnoDB Log Buffer no debe confundirse con el InnoDB Buffer Pool. La principal diferencia entre ellos es su propósito. El InnoDB Log Buffer básicamente registrará los cambios a corto plazo que se escriben en los registros de rehacer (ib_logfile0, ib_logfile1). El InnoDB Buffer Pool (dimensionado por innodb_buffer_pool_size ) almacena en caché los datos y las páginas de índice que deben confirmarse (si las páginas están sucias) y eventualmente escribirse) en el disco. Una vez confirmados, las páginas de cambios permanecen en la RAM hasta que se eliminen mediante las reglas LRU.
Las grandes transacciones deben canalizarse a través del Log Buffer. Como se mencionó, un búfer de registro más grande reducirá la E / S del disco. Solo una gran confirmación presentaría un cuello de botella.
Es posible que desee buscar otras opciones de InnoDB para configurar.
Tengo otras publicaciones sobre la optimización de InnoDB para futuras investigaciones.
fuente