« COMMIT » dans mysql journal de requêtes lentes avec l'application Rails 2.3.5
-
27-10-2019 - |
Question
J'ai beaucoup d'entrées dans le journal des requêtes lentes qui viennent « Commit » sur eux, ils prennent environ 3 secondes, ce qui est lent mais pas terrible par rapport à d'autres requêtes.
les entrées ressemblent à ceci:
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;
Ma question est pourquoi les rails émettront un « Commit »?
Si je comprends bien, il devrait utiliser autocommit à moins que je fais manuellement les transactions.
La solution
Rails effectuer une transaction dans de nombreux cas.
Par exemple, si vous enregistrez un record avec un modèle imbriqué (comme sujet qui a beaucoup de commentaires), Rails envelopperez mises à jour (1 sujet et n commentaires) dans une transaction pour garder votre base de données cohérente .
EDIT
Dès que vous avez deux ou plusieurs requêtes liées les unes aux autres qui a changé la base de données, vous devez avoir une transaction, mais il semble que Rails effectuer un début / commit même sur des requêtes individuelles. Je pense qu'il est conçu de cette façon pour éviter l'activation / désactivation auto-commit inutile.