Изменения документа Уровни изоляции | Isolation levels
Редактировал(а) Alexandr Fokin 2026/06/04 16:22
От версии 9.12
отредактировано Alexandr Fokin
на 2026/06/04 16:22
на 2026/06/04 16:22
Изменить комментарий:
К данной версии нет комментариев
К версии 9.9
отредактировано Alexandr Fokin
на 2025/09/20 11:28
на 2025/09/20 11:28
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -1,39 +1,31 @@ 1 1 ===== Уровни изоляции ===== 2 2 3 -|(% style="width:119px" %)**Уровень**|(% style="width:344px" %)**Чтение и блокировка**|(% style="width:188px" %)**Аномалия**|(% style="width:827px" %)**Описание аномалии** 4 -|(% style="width:119px" %) |(% style="width:344px" %) |(% style="width:188px" %)Потерянные изменения 5 -Lost Update|(% style="width:827px" %)Последовательное обновление строки таким образом, что последнее изменение полностью не учитывает результаты предыдущего и перезаписывает их. 6 -|(% style="width:119px" %)READ UNCOMMITTED|(% style="width:344px" %)((( 7 -|(% style="width:57px" %) |(% style="width:211px" %)Не требует блокировки. 8 -(MsSql - NoLock) 9 -|(% style="width:57px" %)MVCC|(% style="width:211px" %)- 10 -)))|(% style="width:188px" %)Грязное чтение 11 -Dirty read|(% style="width:827px" %)((( 3 +|(% style="width:198px" %)**Уровень**|(% style="width:137px" %)**Чтение и блокировка**|(% style="width:219px" %)**Аномалия**|(% style="width:1077px" %)**Описание аномалии** 4 +|(% style="width:198px" %) |(% style="width:137px" %) |(% style="width:219px" %)Потерянные изменения 5 +Lost Update|(% style="width:1077px" %)Последовательное обновление строки таким образом, что последнее изменение полностью не учитывает результаты предыдущего и перезаписывает их. 6 +|(% style="width:198px" %)READ UNCOMMITTED|(% style="width:137px" %) |(% style="width:219px" %)Грязное чтение 7 +Dirty read|(% style="width:1077px" %)((( 12 12 Считывания из БД данных, которые являются промежуточными или отмененными в будущем. 13 13 Чтение изменений, которые внесены активными транзакциями, и на текущий момент еще не закомичены. 14 14 ))) 15 -|(% style="width:119px" %)READ COMMITTED|(% style="width:344px" %)((( 16 -|(% style="width:45px" %) |(% style="width:222px" %)Удерживает share блокировку в момент считывания (не до конца транзакции). 17 -|(% style="width:45px" %)MVCC|(% style="width:222px" %)Не требует блокировки, читает закомиченные данные (даже если они в текущий момент заблокированы транзакцией с изменением. 18 -\\Для ожидания завершения транзакций с изменением нужно руками наложить share блокирвку. 19 -)))|(% style="width:188px" %)Неповторяющееся чтение 20 -Non-repeatable read|(% style="width:827px" %)((( 11 +|(% style="width:198px" %)READ COMMITTED|(% style="width:137px" %)Не удерживает блокировку строк.|(% style="width:219px" %)Неповторяющееся чтение 12 +Non-repeatable read|(% style="width:1077px" %)((( 21 21 В рамках транзакции при повторном чтении данных, отобразятся все изменения, выполненные и закомиченные другими транзакциями 22 22 (т.к. строки не заблокированы от параллельного изменения, после того как мы их прочитали). 23 23 ))) 24 -|(% colspan="1" rowspan="2" style="width:1 19px" %)REPEATABLE READ|(% rowspan="2" style="width:344px" %)Удерживает share блокировку строкдо конца транзакции|(% style="width:188px" %)Фантомное чтение25 -Phantom reads|(% style="width: 827px" %)В рамках транзакции при повторном чтении данных, может меняться кол-во строк26 -( Связано с добавлением новых строк или изменение существующих таким образом, что они начали попадать в выборку т.к. заблокированы только те строки, которые были прочитаны, а вставка новой строки (подпадающей под условие выборки) не запрещена)16 +|(% colspan="1" rowspan="2" style="width:198px" %)REPEATABLE READ|(% rowspan="2" style="width:137px" %)Удерживает share блокировку строк.|(% style="width:219px" %)Фантомное чтение 17 +Phantom reads|(% style="width:1077px" %)В рамках транзакции при повторном чтении данных, может меняться кол-во строк 18 +(Может быть связано с добавлением новых строк или изменение существующих таким образом, что они начали попадать в выборку т.к. заблокированы только те строки, которые были прочитаны, а вставка новой строки (подпадающей под условие выборки) не запрещена) 27 27 (но обновить или удалить параллельно строки нельзя из-за share блокировки). 28 -|(% style="width:1 88px" %)(((20 +|(% style="width:219px" %)((( 29 29 Аномалия сериализации 30 30 (% style="background-color:transparent" %)Serialization anomaly 31 -)))|(% style="width: 827px" %)(((23 +)))|(% style="width:1077px" %)((( 32 32 В [[PostgreSQL>>doc:Разработка.NET.Работа с БД.EntityFramework | EntityFrameworkCore.EF провайдеры.Provider PostgreSQL.WebHome]] на данном уровне изоляции не возникает аномалии Phantom reads. Но может возникнуть данная аномалия. 33 33 34 34 При использовании теста из документации [[PostgreSQL>>doc:Разработка.NET.Работа с БД.EntityFramework | EntityFrameworkCore.EF провайдеры.Provider PostgreSQL.WebHome]] на текущем уровне изоляции, аномалия также проявилась в [[MSSQL>>doc:Разработка.Базы данных.SQL.MSSQL.WebHome]]. 35 35 ))) 36 -|(% style="width:1 19px" %)SERIALIZABLE|(% style="width:344px" %)Предикатные блокировки.|(% style="width:188px" %)-|(% style="width:827px" %)(((28 +|(% style="width:198px" %)SERIALIZABLE|(% style="width:137px" %)Предикатные блокировки.|(% style="width:219px" %)-|(% style="width:1077px" %)((( 37 37 Выполнение происходит так, словно транзакции выполняются последовательно одна за другой в некотором порядке (при этом не влияя друг на друга). 38 38 39 39 Полное отсутствие перечисленных выше аномалий.