SQL Server - грязное чтение, плюсы и минусы

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

set transaction isolation level read uncommitted

в SQL Server?

21.08.2008 19:12:59
@AK Первая ссылка теперь 404
Neil 9.05.2019 10:09:31
4 ОТВЕТА
РЕШЕНИЕ

Из MSDN :

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

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

15
21.08.2008 19:28:31

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

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

6
21.08.2008 19:26:02

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

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

0
21.08.2008 19:26:44

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

Мы можем прочитать данные с помощью запроса:

Select * from table_name with(nolock) 

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

-1
27.12.2015 05:48:05
Будьте осторожны, когда вы переходите по ссылке на сторонний сайт, так как это будет спам для переполнения стека. Relate: Как не быть спамером .
Kevin Guan 27.12.2015 06:11:23