Поиск…


замечания

Я нашел эту ссылку - это полезно в качестве ссылки: «Уровни изоляции»

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

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

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM Products WHERE ProductId=1;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; --return to the default one
  1. READ UNCOMMITTED - означает, что запрос в текущей транзакции не может получить доступ к измененным данным из другой транзакции, которая еще не совершена - никакие грязные чтения! НО, возможны неповторимые чтения и фантомные чтения, поскольку данные могут быть изменены другими транзакциями.

  2. REPEATABLE READ - означает, что запрос в текущей транзакции не может получить доступ к измененным данным другой транзакции, которая еще не совершена - не грязные чтения! Никакие другие транзакции не могут изменять данные, считываемые текущей транзакцией, до тех пор, пока они не будут завершены, что исключает чтение NONREPEATABLE. НО, если другая транзакция вставляет NEW ROWS и запрос выполняется более одного раза, могут появиться фантомные строки, начиная с второго чтения (если оно соответствует запросу where запроса).

  3. SNAPSHOT - возможность возврата данных, которые существуют в начале запроса. Обеспечивает согласованность данных. Он предотвращает грязные чтения, неповторяемые чтения и фантомные чтения. Чтобы использовать это - необходима конфигурация DB:

ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
  1. READ COMMITTED - изоляция по умолчанию SQL-сервера. Он предотвращает чтение данных, которые были изменены другой транзакцией, пока не будет совершен. Он использует общую блокировку и управление версиями строк в таблицах, что предотвращает грязные чтения. Это зависит от конфигурации БД READ_COMMITTED_SNAPSHOT - если включено - используется управление версиями строк. для включения - используйте это:
ALTER DATABASE DBTestName SET ALLOW_SNAPSHOT_ISOLATION ON;GO;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; --return to the default one
  1. SERIALIZABLE - использует физические блокировки, которые были приобретены и удерживаются до конца транзакции, что предотвращает грязные чтения, фантомные чтения, неповторяемые чтения. НО, это влияет на производительность базы данных, поскольку параллельные транзакции сериализуются и выполняются один за другим.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE ;


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow