Сведения о вопросе

1234123213

04:43, 29th August, 2020

Теги

sql   sql-server    

SQL Сервер - Чтение "Грязных" Данных Плюсы И Минусы

Просмотров: 513   Ответов: 4

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

set transaction isolation level read uncommitted

в SQL сервере?



  Сведения об ответе

$DOLLAR

02:15, 15th August, 2020

От MSDN :

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

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


  Сведения об ответе

appple

11:48, 5th August, 2020

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

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


  Сведения об ответе

lesha

19:21, 16th August, 2020

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

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


  Сведения об ответе

DO__IT

21:06, 1st October, 2020

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

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

Select * from table_name with(nolock) 

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться