2015-10-15 4 views
1

Выполняет ли SQL Server (2005/2008/2012) BEGIN TRANSACTION, как только придет команда?SQL Server: Выполнение транзакции всегда немедленно?

Это - однако (опция, буферизация сети/-delay, распределенная база данных, ..) - возможно, что команда BEGIN TRANSACTION, а также все последующие задерживаются, например. что-то еще должно произойти первым?

Кроме того, существует ли какая-либо вероятность того, что - когда база/сеть вызвана буферизацией/задержкой - две транзакции будут выполнены в обратном порядке?

+1

Выполняет ли SQL Server (2005/2008/2012) BEGIN TRANSACTION, как только придет команда? 'YES' TRANSACTION будет активен, пока не будет' COMMIT' ИЛИ 'ROLLBACK' – wiretext

ответ

1

Когда сервер получает сообщение BEGIN TRAN, он начинает резервирование ресурсов и выполнение команд. Если приходит другая транзакция, требующая некоторых из тех же ресурсов, потребуется ждать, пока первая транзакция не выйдет из этих ресурсов, обычно с помощью COMMIT.

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

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

Данное поведение является C in ACID: Последовательность.

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

+0

Хорошо, я был совершенно уверен в этом. Как насчет двух других вопросов? – SlapY

+0

Второй пункт не полностью закрыт. Как насчет сети? – SlapY

+0

Надеюсь, что это поможет. –

2

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

The MSDN doc говорит:

В процессе оптимизации запросов SQL Server выглядит для запросов или индекса операций, которые могли бы извлечь выгоду из параллельного выполнения. Для этих запросов SQL Server вставляет операторы обмена в запрос план выполнения для подготовки запроса для параллельного выполнения. Оператор обмена является оператором в плане выполнения запроса, который обеспечивает управление процессом, перераспределение данных и управление потоком. Оператор обмена включает в себя операции «Распределить потоки», «Резерв» «Потоки» и «Собирать потоки» как подтипы, один или несколько из которых могут отображаться на выходе Showplan плана запроса для параллельного запроса .

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

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

Насколько я знаю, вы не можете изменить порядок выполнения вашего запроса, который меняет последовательность или меняет какой-либо код/​​запрос.

Смежные вопросы