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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top