2010-12-13 11 views
5

Estaba leyendo this post en el blog de rendimiento MySQL.Optimización InnoDB: "usar transacciones al hacer actualizaciones", ¿por qué?

Bajo aplicación tuning que dice:

primer lugar asegúrese de que está utilizando transacciones al hacer actualizaciones

actualmente estoy usando sólo las transacciones en lugares donde hay múltiples inserciones o actualizaciones en el Mismo tiempo. es decir, más de una mesa.

¿Debo modificar cada UPDATE para convertirlo en una transacción?

¿Cuál es la diferencia entre:

prepare sql 
bind params 
commit 

y:

begin transaction 
prepare sql 
bind params 
execute statement 
commit transaction 

en términos de lo que sucede a nivel de base de datos, que hace que uno más rápido que el otro?

Respuesta

6

InnoDB se ejecuta en modo de confirmación automática de forma predeterminada. Lo que significa es que cada consulta se ejecuta en su propia transacción y se compromete a la vez. En InnoDB esto significa escribir datos en dos lugares en el disco (no me pidas detalles; estoy escribiendo de memoria lo que he leído en MySQL Performance Blog una vez;)).

Ahora, si hace una actualización/insertar/eliminar a la vez, no hay mucho que ganar. Sin embargo, si realiza varias actualizaciones/inserciones/eliminaciones consecutivas, puede ahorrar algo de tiempo en el disco duro al agruparlas en una transacción, y luego comprometer todas de una vez.

+2

+1. Análisis más técnico: hay un búfer que retrasa la escritura en el registro (innodb_log_buffer_size) que debe enjuagarse más frecuentemente si se compromete todo el tiempo, lo que lleva a un peor rendimiento. El búfer también se vacía automáticamente cada 1 segundo. –

Cuestiones relacionadas