2011-08-22 15 views
5

Estamos creando un sistema altamente transaccional con MySQL como DB (motor innodb). Tenemos un activador de inserción y actualización en la tabla t1 que está actualizando la tabla t2 y t3. Hemos observado que cada vez que el volumen de usuarios concurrentes es alto, obtenemos un bloqueo en la tabla t1. Estamos asumiendo que el activador está emitiendo un bloqueo de tabla hasta que esté completando su ejecución. Soltamos el gatillo en t1 y sorprendentemente ya no hay punto muerto.Disparadores en un sistema altamente transaccional

Mi pregunta:

  1. ¿No es recomendable tener el gatillo en un sistema altamente transaccional
  2. Si no desencadenan ¿cuáles son las otras opciones para poner en práctica la misma lógica.

La tabla t1 tiene aproximadamente 70,000 filas y aumenta cada día.

Apreciar cualquier entrada.

Gracias de antemano.

+4

No proporcionó suficiente información. La emisión de 'SHOW ENGINE INNODB STATUS' le mostrará la causa del punto muerto. 70k row realmente no es nada, lo que debes hacer (si quieres ayuda) es publicar la consulta en cuestión, la estructura de la tabla y el activador. Puede reemplazar los nombres de campo reales con letras para que no se revele la lógica de negocios. –

Respuesta

0

Puede usar transacciones en su lugar y hacer todo el procesamiento del lado del cliente.

START TRANSACTION; 

insert into t1; 
update t2; 
update t3; 

COMMIT; 

Trate de no usar 'actualización seleccione' y 'insertar seleccione' construye si se puede salir con el uso de datos de clientes proporcionada. También InnoDB utiliza el bloqueo de filas, que es mejor que el bloqueo de tablas que utiliza MyISAM.

Cuestiones relacionadas