Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 При грязном чтении я могу ухватить кусок данных из незакомиченной транзакции?  [new]
OracleLover
Member

Откуда: Россия, Казань
Сообщений: 20899
Здравствуйте, я понимаю что на то он и WITH (NOLOCK) чтобы тянуть данные которые еще незакомиченные. У меня вот такой вопрос, ситуацию я не смоделирую, поэтому проверить на практике не могу, но ответ нужен:

BEGIN TRANSACTION t1
...
COMMIT TRANSACTION t1


Представьте что операции за многоточием длятся по нескольку часов, и представьте теперь что есть 3 последовательные операции

1. Добавление в таблицу Table1 записи
2. Добавление в таблицу Table2 записи
3. Удаление из таблицу Table1 записи которая была добавлена в п.п 1

Может ли чисто теоретически получится такая ситуация что ридер который использует "грязное чтение" ухватит запись которая была добавлена в п.п 1 до того как она удалится в п.п. 3 при коммите транзакции?
14 ноя 12, 13:36    [13471640]     Ответить | Цитировать Сообщить модератору
 Re: При грязном чтении я могу ухватить кусок данных из незакомиченной транзакции?  [new]
invm
Member

Откуда: Москва
Сообщений: 9396
OracleLover
Может ли чисто теоретически получится такая ситуация что ридер который использует "грязное чтение" ухватит запись которая была добавлена в п.п 1 до того как она удалится в п.п. 3 при коммите транзакции?
Почему же теоретически? Очень даже практически может "ухватить".
14 ноя 12, 13:47    [13471767]     Ответить | Цитировать Сообщить модератору
 Re: При грязном чтении я могу ухватить кусок данных из незакомиченной транзакции?  [new]
OracleLover
Member

Откуда: Россия, Казань
Сообщений: 20899
invm
OracleLover
Может ли чисто теоретически получится такая ситуация что ридер который использует "грязное чтение" ухватит запись которая была добавлена в п.п 1 до того как она удалится в п.п. 3 при коммите транзакции?
Почему же теоретически? Очень даже практически может "ухватить".


Я имел ввиду вообще есть ли вероятность. Ясно, спасибо.
14 ноя 12, 13:51    [13471798]     Ответить | Цитировать Сообщить модератору
 Re: При грязном чтении я могу ухватить кусок данных из незакомиченной транзакции?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
OracleLover
invm
пропущено...
Почему же теоретически? Очень даже практически может "ухватить".


Я имел ввиду вообще есть ли вероятность. Ясно, спасибо.
Есть, даже если ваши три точки длятся 30мс.
14 ноя 12, 13:52    [13471802]     Ответить | Цитировать Сообщить модератору
 Re: При грязном чтении я могу ухватить кусок данных из незакомиченной транзакции?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
снапшоты.. но несколько часов транзакция - это очень сильно
14 ноя 12, 13:52    [13471803]     Ответить | Цитировать Сообщить модератору
 Re: При грязном чтении я могу ухватить кусок данных из незакомиченной транзакции?  [new]
super-code
Member

Откуда:
Сообщений: 244
OracleLover, если нужно читать данные без блокировок, но не натыкаться на грязные, может нужен with readpast?
14 ноя 12, 14:56    [13472472]     Ответить | Цитировать Сообщить модератору
 Re: При грязном чтении я могу ухватить кусок данных из незакомиченной транзакции?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
super-code
OracleLover, если нужно читать данные без блокировок, но не натыкаться на грязные, может нужен with readpast?


ээээ... оригинальная идея. отличный способ не получить данных вообще правда, ожиданий тоже не будет
14 ноя 12, 15:19    [13472727]     Ответить | Цитировать Сообщить модератору
 Re: При грязном чтении я могу ухватить кусок данных из незакомиченной транзакции?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31420
super-code
OracleLover, если нужно читать данные без блокировок, но не натыкаться на грязные, может нужен with readpast?
readpast будет читать незаблокированные данные.

Можно пользоваться сиквелом как версионником, используя спапшёт-уровень изоляции. Но это требует дополнительных ресурсов.

В общем, нужно смотреть исходя из бизнес-задачи.

А вообще транзакция на несколько часов - это перебор, нужно как то решать эту проблему. В конце концов, никакая организация чтения не решит проблему невозможности обновления во время транзакции.
14 ноя 12, 15:24    [13472796]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить