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

Откуда: Нижний Новгород
Сообщений: 73
Всем дарова, подскажите пожалуйста.
Проблема:
Уровень изоляции устанавливается на отдельную транзакцию. А если такая ситуация: proc1 требует read commited, proc2 требует repeateble read, а proc3 требует serializable. proc2 вызывается из proc1 и proc3, тогда объявление repeateble read в вызываемой процедуре понизит уровень proc3, а если не объявлять, то не повысит proc1. Исходим из принципа вложенных транзакций не бывает по определению, и для возможного оката пользуем точки сохранения. Как быть? Какие мысли?
11 май 04, 13:02    [671081]     Ответить | Цитировать Сообщить модератору
 Re: Уровни изоляции транзакций во вложенных процедурах  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
автор
Исходим из принципа вложенных транзакций не бывает по определению, и для возможного оката пользуем точки сохранения. Как быть?

В смысле? Чего как быть? Какие проблеммы то?
11 май 04, 13:27    [671146]     Ответить | Цитировать Сообщить модератору
 Re: Уровни изоляции транзакций во вложенных процедурах  [new]
kontr
Member

Откуда: Нижний Новгород
Сообщений: 73
Дык, проблема в следующем: Уровни надо иногда повышать (обязательно), а иногда понижать (желательно). Как это сделать? Хинтов слишком много придется ставить - не хотелось бы.
11 май 04, 13:38    [671176]     Ответить | Цитировать Сообщить модератору
 Re: Уровни изоляции транзакций во вложенных процедурах  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну, дык и понижа/повышай как надо.
БОЛ явно говорит, что текущий уровень изоляции действует до явного изменения, если на таблице не задан явно хинт.
11 май 04, 13:43    [671197]     Ответить | Цитировать Сообщить модератору
 Re: Уровни изоляции транзакций во вложенных процедурах  [new]
kontr
Member

Откуда: Нижний Новгород
Сообщений: 73
А если будет так: proc3 начинает работать с серализейблом, ставит на таблицу table1 блокировки, потом запускает proc2 и там происходит понижение уровня. Блокировки с table1 снимутся? А ведь этого быть не должно (в смысле для меня).
Я наверно невнятно описал проблему. Звиняйте, виноват.
11 май 04, 13:49    [671221]     Ответить | Цитировать Сообщить модератору
 Re: Уровни изоляции транзакций во вложенных процедурах  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
автор
Блокировки с table1 снимутся? А ведь этого быть не должно (в смысле для меня).

А почему они должны снятся? Транзакция уже завершилась? Или в этих процедурах изменяются одни и те же строки одной таблицы?

И, ещё, ИМХО, я бы в такой "каскадной" обработке вместо общей установки уровня изоляции транзакций использовал бы уровни изоляции на ресурсы (хинты). ИМХО, всяко гибче...
11 май 04, 14:50    [671418]     Ответить | Цитировать Сообщить модератору
 Re: Уровни изоляции транзакций во вложенных процедурах  [new]
George N
Member

Откуда: Москва
Сообщений: 97
Нужно бы использовать нечто вроде:
По умолчанию ставим везде один и тот же уровень изоляции.
Где нужно явно его изменить прописываем хинтами (не используя set transaction isolation level)
Вообще эта установка влияет только на типы вновь устанавливаемых блокировок. (Например, при serializable даже в случае select будут эксклюзивные блокировки)
Время жизни блокировки определяется ее типом (например, разделяемая живет до конца statement, эксклюзивная - до конца транзакции и т.п.)
11 май 04, 15:06    [671475]     Ответить | Цитировать Сообщить модератору
 Re: Уровни изоляции транзакций во вложенных процедурах  [new]
kontr
Member

Откуда: Нижний Новгород
Сообщений: 73
tpg
И, ещё, ИМХО, я бы в такой "каскадной" обработке вместо общей установки уровня изоляции транзакций использовал бы уровни изоляции на ресурсы (хинты). ИМХО, всяко гибче...

Может я чего не знаю (точно много не знаю), но как снять блокировку ранее установлнную хинтомесли она более не нужна?

И вообще попытаюсь резюмировать:
Ставим read commited.
Все select'ы ставят коллективные блокировки.
Ставим serializable.
Все новые select'ы ставят эксклюзивные блокировки.
Ставим read commited.
Все новые select'ы ставят коллективные блокировки, а старые эксклюзивные все равно сохраняются.
Я правильно понял?
11 май 04, 15:29    [671552]     Ответить | Цитировать Сообщить модератору
 Re: Уровни изоляции транзакций во вложенных процедурах  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
автор
но как снять блокировку ранее установлнную хинтомесли она более не нужна?

commit tran/rollback tran
11 май 04, 15:35    [671577]     Ответить | Цитировать Сообщить модератору
 Re: Уровни изоляции транзакций во вложенных процедурах  [new]
kontr
Member

Откуда: Нижний Новгород
Сообщений: 73
Не выход, но все равно спасибо за советы.
11 май 04, 15:44    [671618]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить