&引用;“提交”;使用rails应用程序2.3.5在mysql慢速查询日志中

&引用;“提交”;使用rails应用程序2.3.5在mysql慢速查询日志中,mysql,ruby-on-rails,database-performance,Mysql,Ruby On Rails,Database Performance,我在慢速查询日志中有很多条目,上面只有“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; # T

我在慢速查询日志中有很多条目,上面只有“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会发出“提交”命令


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

Rails在许多情况下执行事务

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

编辑


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

Rails在许多情况下执行事务

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

编辑


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

有趣的是,在查看我的rails日志时,我看到了很多“先开始,然后执行”,甚至在不执行嵌套保存时,rails可能从未使用过“自动提交”…我在某个地方的文档中读到,但是可能是文档错了。我检查了一个日志,你是对的,Rails会对更改数据库的每个查询执行一个事务。我完成了答案。有趣的是,在查看我的rails日志时,我看到了很多“先开始,然后做某事,然后提交”,即使没有进行嵌套保存,也许rails从未使用过“自动提交”…我在某个地方的文档中读到了这一点,但可能文档是错误的..我检查了日志,你是对的,Rails对更改数据库的每个查询执行一个事务。我完成了答案。