Понимание уровней изоляции транзакций

Я новичок в этой теме и пытаюсь проверить то, что понимаю. поэтому, пожалуйста, рассмотрите следующий пример: -

Транзакция содержит операторы выбора и обновления, где оператор обновления зависит от набора результатов, возвращаемого оператором выбора. Пользователь A и B одновременно выполняют транзакцию. Оба пользователя выбрали данные и собираются выполнить обновление. Если пользователь A выполнит обновление первым, у пользователя B, вероятно, будет ошибка; потому что он не имеет обновленного набора результатов. Это называется случай фантомного чтения.

Для сериализуемого уровня изоляции: описанного выше случая никогда не произойдет. Транзакции полностью изолированы и не могут работать одновременно. Транзакция пользователя B не может выполнить оператор select, пока пользователь A не завершит свою транзакцию. Пользователь Б будет ждать, пока транзакция А не будет завершена.

Для уровня изоляции «Повторяющееся чтение»: транзакция B может читать, но не может изменять данные. Что может вызвать фантомное чтение.

Можете ли вы сказать, правильное ли это понимание?


person Costa    schedule 24.08.2013    source источник


Ответы (1)


Схемы блокировки по умолчанию на сервере sql не позволяют запросам возвращать недопустимые данные. Когда команда выдается, она будет ждать блокирующих команд или возвращать ошибку взаимоблокировки по истечении тайм-аута. Жертва откатить проще всего, обычно читает. Это предотвращает грязные данные. Возможно, вы захотите изучить подсказки блокировки и различные способы обхода поведения по умолчанию.

Использование NOLOCK для команд только для чтения приведет к повышению производительности в системе OLTP, когда вы не заботитесь о том, что происходит во время выполнения команды.

person Ross Bush    schedule 25.08.2013