Pregunta

Tengo muchas entradas en el registro de consultas lentas que solo tienen "compromiso" en ellos, toman alrededor de 3 segundos, lo cual es lento pero no horrible en comparación con otras consultas.

Las entradas se ven así:

COMMIT;
# Time: 120111 14:11:05
# User@Host: root[root] @ localhost []
# Query_time: 3.140228  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0
SET timestamp=1326291065;
COMMIT; 
# Time: 120111 14:14:03
# User@Host: root[root] @ localhost []
# Query_time: 2.036250  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 0
SET timestamp=1326291243;
COMMIT;

Mi pregunta es ¿por qué los Rails emitirían un "compromiso"?

Entiendo que debería estar usando Autocommit a menos que esté haciendo transacciones manualmente.

¿Fue útil?

Solución

Rieles que realizan una transacción En muchos casos.

Por ejemplo, si guarda un registro con un modelo anidado (como el tema que tiene muchos comentarios), Rails envolverá actualizaciones (1 tema y n comentarios) en una transacción Para mantener su base de datos consistente.

EDITAR

Tan pronto como tenga dos o más consultas vinculadas entre sí que cambiaron la base de datos, debe tener una transacción, pero parece que los rieles realizan un comienzo/confirmación incluso en consultas individuales. Creo que está diseñado de esta manera para evitar la activación/desactivación inútiles de autocomita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top