Esta pregunta probablemente también se pueda hacer en StackOverflow, pero primero intentaré aquí ...
El rendimiento de las instrucciones INSERT y UPDATE en nuestra base de datos parece ser degradante y causar un bajo rendimiento en nuestra aplicación web.
Las tablas son InnoDB y la aplicación utiliza transacciones. ¿Hay algunos ajustes fáciles que pueda hacer para acelerar las cosas?
Creo que podríamos estar viendo algunos problemas de bloqueo, ¿cómo puedo averiguarlo?
mysql
performance
innodb
mmattax
fuente
fuente
Respuestas:
Compruebe si su hardware y sistema operativo están configurados y ajustados correctamente:
Compruebe, si su instancia de MySQL / InnoDB está ajustada correctamente:
Load data infile
El comando es mucho más rápido para series de inserciones.select count(*) from table;
es mucho más lento para innodb que para myisam.Algunos enlaces útiles:
fuente
Con la configuración predeterminada de innoDB, estará limitado a qué tan rápido puede escribir y vaciar transacciones en el disco. Si puede lidiar con perder un poco de ACID, experimente con innodb_flush_log_at_trx_commit. Establezca en 0 para escribir y vaciar el registro al disco aproximadamente cada segundo. Establezca en 1 (predeterminado) para escribir y vaciar en cada confirmación. Establezca en 2 para escribir en el archivo de registro después de cada confirmación, pero enjuague solo una vez por segundo.
Si puede lidiar con la pérdida de 1s de transacciones, esta puede ser una excelente manera de mejorar enormemente el rendimiento de escritura.
Además, preste atención a lo que están haciendo sus discos. RAID 10> RAID 5 para escrituras a costa de un disco adicional.
fuente
Los problemas de bloqueo se verán afectados por los estados de conexión en
show full processlist;
Lea la
my.cnf
documentación y MySQL. Las opciones de configuración están muy bien documentadas.En términos generales, desea que se procesen tanto en la memoria como sea posible. Para la optimización de consultas, eso significa evitar tablas temporales. Aplicación adecuada de índices.
El ajuste será específico para su motor de base de datos preferido y la arquitectura de la aplicación. Hay recursos sustanciales preexistentes a una búsqueda en Internet.
fuente
Encender los monitores Innodb puede ayudar a identificar las causas de bloqueos y puntos muertos:
MOSTRAR ESTADO INNODB DEL MOTOR y los monitores InnoDB
fuente
InnoDB es un motor bastante bueno. Sin embargo, depende en gran medida de estar 'sintonizado'. Una cosa es que si sus inserciones no están en el orden de aumentar las claves primarias, innoDB puede tardar un poco más que MyISAM. Esto se puede superar fácilmente configurando un mayor innodb_buffer_pool_size. Mi sugerencia es establecerlo en 60-70% de su RAM total. Estoy ejecutando 4 servidores de este tipo en producción ahora, insertando alrededor de 3,5 millones de filas por minuto. Ya tienen cerca de 3 terabytes. InnoDB tenía que ser, debido a las inserciones altamente concurrentes. Hay otras formas de acelerar las inserciones. Y he comparado algunos.
fuente
Cómo resuelvo los problemas de inserción y actualización de rendimiento en MySQL en la aplicación web simplemente deshabilitando los cambios de confirmación automática y confirmación una vez en Java. Como se sugiere en la documentación de mysql.
Documentos de MySQL
fuente