Добавляют ли транзакции издержки к БД? - PullRequest
5 голосов
/ 14 февраля 2012

Будет ли добавлено накладных расходов для размещения транзакций БД вокруг каждого метода обслуживания в нашем приложении?

В настоящее время мы используем транзакции БД только там, где это явно / очевидно необходимо. Недавно я предложил транзакции вокруг всех методов обслуживания , но некоторые другие разработчики задали осторожный вопрос: добавит ли это издержки?

Мне кажется, что автоматическая фиксация аналогична транзакции с точки зрения БД. Но точно ли это?

БД: MySQL

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Вы правы, с автокоммитом каждый оператор оборачивается транзакцией.Если ваши сервисные методы выполняют несколько SQL-операторов, было бы хорошо заключить их в транзакцию.Взгляните на этот ответ для более подробной информации, а здесь - хороший пост в блоге на эту тему.

И чтобы ответить на ваш вопрос, да, транзакции действительно добавляютСнижение производительности, но в вашем конкретном случае вы не заметите разницы, поскольку у вас уже включена функция автоматической фиксации, если только у вас нет долго выполняющихся операторов в методах обслуживания, что приведет к более длительным блокировкам таблиц, участвующих в транзакциях.Если вы просто заключите несколько операторов в транзакцию, вы получите одну транзакцию (вместо транзакции для каждого отдельного оператора), как указано здесь («Сеанс с включенной автоматической фиксацией может выполнить транзакцию с несколькими операторами»начав его с явного оператора START TRANSACTION или BEGIN и завершив его оператором COMMIT или ROLLBACK "), и вы достигнете атомарности на уровне метода обслуживания ...

В конце я бы пошел с вашимрешение, если это имеет смысл с точки зрения достижения атомарности на уровне метода обслуживания (что, я думаю, вы хотите достичь), но есть + и - влияние на производительность, в зависимости от ваших запросов, запросов / с и т. д ...

0 голосов
/ 14 февраля 2012

Краткий ответ: это зависит от типа вашей таблицы.Если вы используете MyISAM по умолчанию, транзакций на самом деле нет, поэтому не должно не влиять на производительность.

Но вы должны использовать их в любом случае .Без транзакций нет разграничения работы.Если вы обновитесь до InnoDB или реальной базы данных, такой как PostgreSQL, вы все равно захотите добавить эти транзакции к своим методам обслуживания, так что вы можете также сделать это привычкой сейчас, пока это вам ничего не стоит.

Кроме того, вы уже должны использовать транзакционный магазин.Как вы можете очистить, если метод обслуживания в настоящее время не работает?Если вы записываете некоторую информацию в базу данных, а затем ваш сервисный метод выдает исключение, как вы удаляете эту неполную или ошибочную информацию?Если бы вы использовали транзакции, вам бы не пришлось - база данных отбросила бы откатанные данные для вас.Или что вы делаете, если я на полпути к методу, а другой запрос приходит и находит мои наполовину записанные данные?Это взорвется, когда будет искать другую половину, которой еще нет?Хранилище транзакционных данных будет обрабатывать это для вас: ваши транзакции будут изолированы друг от друга, поэтому никто больше не сможет увидеть частично записанную транзакцию.

Как и все в случае с базами данных, единственным окончательным ответом будет тестирование с реалистичнымданные и реалистичные нагрузки.Я рекомендую вам делать это всегда, независимо от того, что вы подозреваете, потому что, когда дело доходит до баз данных, активируются очень разные пути кода, когда данные большие, а когда нет.Но я сильно подозреваю, что стоимость использования транзакций даже с InnoDB невелика.В конце концов, эти системы интенсивно используются каждый день крупными и мелкими организациями, которые зависят от эффективности транзакций.MVCC добавляет очень мало накладных расходов.Преимущества огромны, затраты невелики - используйте их!

0 голосов
/ 14 февраля 2012

Да, они могут добавить накладные расходы.Дополнительная «бухгалтерия», необходимая для изоляции транзакций друг от друга, может стать значительной, особенно если транзакции остаются открытыми в течение длительного времени.

...