"Commit" en el registro de consultas lentas de MySQL con la aplicación Rails 2.3.5
-
27-10-2019 - |
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.
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.