суббота, 10 декабря 2016 г.

Commit или rollback?

Когда я много работал с базами данных, но как-то никогда раньше не задумывался на вопросом: что лучше делать, если начал транзакцию, но в результате ничего не поменял?

Мой вопрос идет исключительно о производительности. Допустим, я уверен на 100%, что для функционала никакой разницы нет. Что дороже - пустой commit или пустой rollback? Наверняка зависит от СУБД...

1 комментарий:

Z комментирует...

Честно говоря, не понял зачем открывать транзакцию если нет изменений.
COMMIT приведёт к сохранению данных о транзакции в лог транзакций, ROLLBACK удалит транзакцию из буфера. Вообще, конечно, хороший вопрос. Если не углубляться в детали, то пустой COMMIT будет быстрее ROLLBACK очень тяжелой транзакции, которая съела RAM (если это поддерживается СУБД) и кушает файл подкачки.
Мой ответ - если ROLLBACK уместился в кеше в RAM и ничего при этом не писал на диск, то он будет быстрее. Если СУБД не поддерживает кеш транзакций, то очевидно COMMIT будет быстрее.
Если говорить о рекомендации, то я бы рекомендовал открывать транзакцию только тогда, когда действительно есть что менять, так как на время транзакции блокируются на запись (а во многих случая и на чтение) записи и таблицы, т.е. другой процесс будет ждать пока первая транзакция не снимет блокировку даже если фактически никаких изменений не вносится.

Ratings by outbrain