digital-garden/_inbox/Неповторяющееся чтение.md

1.8 KiB
Raw Blame History

aliases tags date zero-link parents linked link
non-repeatable reads
зрелость/🌱
2024-06-19
00 Базы Данных
Проблемы при параллельном выполнении нескольких транзакций
https://struchkov.dev/blog/ru/transactional-isolation-levels/#%D0%BD%D0%B5%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B5%D0%B5%D1%81%D1%8F-%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D0%B5

Неповторяющееся чтение (non-repeatable reads). Запрос с одними и теми же условиями даёт неодинаковые результаты в рамках транзакции. ^3e8781

Эта проблема присутствует на уровне изоляции Read committed и Read uncommitted.

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

Во второй транзакции устанавливаем пользователю баланс равный 100_000. После чего закрываем вторую транзакцию. Баланс успешно обновился в БД.

Первая транзакция продолжает выполнение. Снова запрашивает баланс пользователя из БД, на этот раз получает значение 100_000. Таким образом, вторая транзакция повлияла на выполнение первой.