«Commit» в журнале медленного запроса MySQL с приложением Rails 2.3.5

StackOverflow https://stackoverflow.com/questions/8826267

Вопрос

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

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

Это было полезно?

Решение

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

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

РЕДАКТИРОВАТЬ

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top