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;

私の質問は、レールが「COMMIT」を発行するのはなぜですか?

私の理解では、トランザクションを手動で行っていない限り、自動コミットを使用する必要があります。

4

1 に答える 1

0

多くの場合、Rails はトランザクションを実行します。

たとえば、ネストされたモデル (多くのコメントを持つトピックなど) でレコードを保存する場合、Rails はトランザクションで更新 (1 つのトピックと n 個のコメント) をラップして、データベースの一貫性を維持します

編集

データベースを変更する相互にリンクされた 2 つ以上のクエリがあるとすぐにトランザクションが必要ですが、Rails は単一のクエリでも begin/commit を実行するようです。無駄な自動コミットのアクティブ化/非アクティブ化を避けるために、このように設計されていると思います。

于 2012-01-11T20:52:29.343 に答える