"COMMIT" в журнале медленных запросов mysql с приложением rails 2.3.5 - PullRequest
2 голосов
/ 12 января 2012

У меня есть много записей в медленном журнале запросов, на которых просто есть «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"?

Насколько я понимаю, следует использовать автокоммит, если я не выполняю транзакции вручную.

1 Ответ

0 голосов
/ 12 января 2012

Рельсы, выполняющие транзакцию во многих случаях.

Например, если вы сохраняете запись с вложенной моделью (например, тема с большим количеством комментариев), Rails обернет обновления (1 тема и n комментариев) в транзакцию , чтобы обеспечить согласованность вашей базы данных .

EDIT

Как только у вас есть два или более запросов, связанных друг с другом, которые изменили базу данных, у вас должна быть транзакция, но кажется, что Rails выполняет начало / принятие даже по отдельным запросам. Я думаю, что он разработан таким образом, чтобы избежать бесполезной активации / деактивации автоматической фиксации.

...