SQL Server - грязные чтения за и против - PullRequest
9 голосов
/ 21 августа 2008

Почему я должен или не должен использовать грязные чтения:

set transaction isolation level read uncommitted

в SQL Server?

Ответы [ 4 ]

15 голосов
/ 21 августа 2008

С MSDN :

Когда эта опция установлена, возможно чтение незафиксированных или грязных данных; значения в данных могут быть изменены, и строки могут появляться или исчезать в наборе данных до конца транзакции.

Проще говоря, когда вы используете этот уровень изоляции и выполняете несколько запросов к активной таблице как часть одной транзакции, нет никакой гарантии, что информация, возвращенная вам в различных частях транзакции, останется неизменной , Вы можете запросить одни и те же данные дважды в одной транзакции и получить разные результаты (это может произойти в случае, когда другой пользователь обновлял одни и те же данные в разгар вашей транзакции). Это может иметь серьезные последствия для частей вашего приложения, которые полагаются на целостность данных.

6 голосов
/ 21 августа 2008

Как правило, когда вам нужно выполнять масштабные (или частые) запросы к занятым таблицам, где зафиксированное чтение может быть заблокировано блокировками от незафиксированных транзакций, но ТОЛЬКО тогда, когда вы можете жить с неточными данными.

В качестве примера, на игровом веб-сайте, над которым я недавно работал, было краткое отображение некоторых статистических данных о последних играх, все это основано на грязном чтении, для нас было более важно включить, а затем исключить транзакционные данные все же совершенные (мы все равно знали, что будет отменено лишь небольшое количество транзакций), мы чувствовали, что в среднем данные будут более точными.

0 голосов
/ 27 декабря 2015

Дело в том, что когда вы хотите прочитать данные перед фиксацией, мы можем сделать это с помощью установки уровня изоляции транзакции, считываемой незафиксированной, данные могут или не могут измениться.

Мы можем прочитать данные, используя запрос:

Select * from table_name with(nolock) 

Это применимо только к чтению незафиксированного уровня изоляции.

0 голосов
/ 21 августа 2008

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

Также взгляните на изоляцию моментальных снимков, которая была введена в SQL Server 2005

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...