Действительно ли мне нужно использовать транзакции в хранимых процедурах?[MSSQL 2005]

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

Вопрос

Я пишу довольно просто e-commerce app в asp.net, нужно ли мне использовать транзакции в хранимых процедурах?

Соотношение чтения/записи составляет около 9:1.

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

Решение

Многие спрашивают – нужны ли мне транзакции?Зачем они мне нужны?Когда их использовать?

Ответ прост:используйте их постоянно, если только у вас нет веских причин не делать этого (например, не используйте атомарные транзакции для «длительных действий» между предприятиями).По умолчанию всегда должно быть да.Вы сомневаетесь?- использовать транзакции.

Почему транзакции выгодны?Они помогают вам справляться со сбоями, сбоями, обеспечивать согласованность данных, обработку ошибок, писать более простой код и т. д.И список преимуществ со временем будет расширяться.

Вот еще информация от http://blogs.msdn.com/florinlazar/

Другие советы

Помните, что в SQL Server все операции CRUD с одним оператором по умолчанию выполняются в неявной транзакции.Вам просто нужно включить явные транзакции (BEGIN TRAN), если вам нужно, чтобы несколько операторов действовали как атомарная единица.

Ответ: это зависит.Вам не всегда нужна безопасность транзакций.Иногда это излишне.Иногда это не так.

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

Нужна ли вам транзакция при создании новой учетной записи пользователя?Возможно, если это 10 таблиц (по какой-либо причине), если это всего лишь одна таблица, то, вероятно, нет.

Это также зависит от того, за что вы продали своему клиенту, кто он, просил ли он об этом и т. д.Но если принятие решения зависит от вас, то я бы сказал, выбирайте мудро.

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

Конечно, это зависит.

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

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

Это говорит о том, что вы не всегда можете просто решить: использовать или не использовать транзакциюs, скорее, вам следует применять их, когда это имеет смысл.Используйте свойства, определенные КИСЛОТА (атомарность, согласованность, изоляция и долговечность), чтобы помочь решить, когда это может быть так.

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

К сожалению, на этот вопрос нелегко ответить точно:"Это зависит."

Используйте их, если:

  1. Есть некоторые ошибки, которые вы, возможно, захотите проверить и обнаружить, но которые не будут обнаружены, кроме как если вы выйдете и выполните работу (поиск вещей, проверка значений и т. д.), обычно внутри транзакции, чтобы вы могли выполнить прокрутку. вернуть всю операцию.
  2. Существуют любые многоэтапные операции, которые, по логике вещей, должны быть отменены как группа в случае сбоя.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top