2015-05-14 2 views
3

Мне кажется, что я должен это знать, но я не могу найти ничего, что конкретно обрисовывает это, поэтому здесь.SQL Server 2012 - Как работает уровень изоляции «Повторяемый Чтение»?

The documentation для SQL Server описывает REPEATABLE читаться как:

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

Это имеет смысл, но что на самом деле происходит , когда возникает одна из этих ситуаций? Если, например, транзакция A считывает строку 1, а затем транзакция B пытается обновить строку 1, что произойдет? Транзакция B ожидает завершения транзакции A, а затем повторите попытку? Или это исключение?

ответ

1

REPEATABLE READ принимает S-блокировки во всех строках, которые были прочитаны операторами плана запроса на весь период транзакции. Ответ на ваш вопрос следует из этого:

  1. Если чтение на первом месте, S-блокирует строку, и запись должна подождать.
  2. Если запись наступает сначала, S-lock ожидает фиксации записи.

Под Hekaton это работает по-другому, потому что нет замков.

+0

Правильно, поэтому он * ждёт *, то? Таким образом, транзакция A на самом деле не предотвращает транзакцию B *, которая делает обновление, она просто заставляет дождаться завершения транзакции A до этого? – bornfromanegg

+0

Он ждет, прежде чем писать или читать эту конкретную строку. Разве не ясно, что он ждет? – usr

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