2012-01-11 34 views
2

我有很多条目的慢查询日志中,仅仅有“提交”在他们身上,他们需要大约3秒,这是缓慢的,但相比不可怕一些其他的疑问。“提交”在MySQL慢查询日志与Rails应用程序2.3.5

的条目是这样的:

COMMIT; 
# Time: 120111 14:11:05 
# [email protected]: 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 
# [email protected]: root[root] @ localhost [] 
# Query_time: 2.036250 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 
SET timestamp=1326291243; 
COMMIT; 

我的问题是,为什么会被铁轨发出“提交”?

我的理解是,应使用自动提交,除非我做的手工交易。

回答

0

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

编辑

只要你有两个或两个以上彼此连接,改变你必须有一个事务中的数据库查询,但似乎Rails的执行开始/提交甚至在单查询。我认为这是为了避免无用的自动提交激活/停用而设计的。

+0

有趣,看着我的Rails日志我看到很多BEGIN的东西,然后再COMMIT,即使没有做嵌套的扑救,也许轨犯规利用自动提交过....我读到某处的文档,但也许该文档错了.. – Joelio 2012-01-11 21:32:33

+0

我检查了一个日志,你是对的,Rails在每一个改变数据库的查询上执行一个事务。我完成了答案。 – basgys 2012-01-11 21:55:30