2

我在慢查询日志中有很多条目,上面只有“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”?

我的理解是它应该使用自动提交,除非我手动进行交易。

4

1 回答 1

0

Rails在许多情况下执行事务。

例如,如果您使用嵌套模型保存记录(例如有许多评论的主题),Rails 将在事务中包装更新(1 个主题和 n 条评论)以保持您的数据库一致

编辑

只要您有两个或多个相互链接的查询更改了数据库,您就必须有一个事务,但似乎 Rails 甚至在单个查询上也执行开始/提交。我认为它是这样设计的,以避免无用的自动提交激活/停用。

于 2012-01-11T20:52:29.343 回答