我在慢速查询日志中有很多条目,上面只有“COMMIT”,它们大约需要 3 秒,这很慢,但与其他一些查询相比并不糟糕。
条目看起来像这样:
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;
我的问题是为什么 Rails 会发出“COMMIT”?
我的理解是它应该使用自动提交,除非我手动进行事务。
最佳答案
在许多情况下,
Rails 执行事务。
例如,如果您使用嵌套模型保存记录(例如包含许多评论的主题),Rails 会将更新(1 个主题和 n 个评论)包装在事务中以保持数据库的一致性。
编辑
一旦您有两个或多个相互链接的查询更改了数据库,您就必须有一个事务,但似乎 Rails 即使在单个查询上也会执行开始/提交。我认为它的设计方式是为了避免无用的自动提交激活/停用。
关于mysql - mysql慢查询日志中的"COMMIT"与rails应用程序2.3.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8826267/