Если в транзакцию входят два запроса select

6yrop

Если в бизнес-транзакцию входят два запроса select, то оба запроса надо включать в одну транзакцию, причем с наивысшим уровнем изоляции Serializable. Иначе возможны серьезные проблемы.
Например, если читаем данные из двух связанных таблиц A(parent B(child). Если не устанавливать высокий уровень изоляции Serializable, то может произойти следующее (в хронологическом порядке):
1. первый пользователь прочитал таблицу A
2. второй пользователь вставил строку в A, потом в B
3. первый пользователь прочтет лишнюю строку из B, для которой не прочел parent-строку из A.
Я прав?
Но Serializable очень не рекомендуют использовать .
Имхо, лучше dead-lock, и пусть выскочит exception, чем такие косяки.

Dasar

если ты хочешь избавиться даже от "грязного" чтения и прерывания своей транзакции - то да, либо высокий уровень транзакции, либо БД с поддержкой версионности.

Dasar

> Я прав?
на самое деле нет, в п.3. твоя транзакция просто будет прервана, если установлена, например, optimistic-блокировки

6yrop

для того, чтобы не было "грязного чтения", достаточно ReadCommitted, который установлен по-умолчанию.

Dasar

вообще, твоя база какие блокировки умеет делать - не считая стандартных уровней изоляции?

6yrop

MS SQL Server 2000

6yrop

вообще, твоя база какие блокировки умеет делать - не считая стандартных уровней изоляции?
уровни изоляции и типы блокировок это совсем разные вещи.

bastii

А что за optimistic-блокировки в mssql?

bastii

уровни изоляции и типы блокировок это совсем разные вещи
Они связаны, по крайней мере в mssql. В зависимости от уровня изоляции select и проч. делают разные блокировки по умолчанию. Т.е. фактически ты можешь хинтами в команде заказать блокировку, которую без хинта команды делала бы только при более высоком уровне изоляции.
А вообще все зависит от твоих транзакций. Нужно рассматривать на более конкретном примере.

bastii

Интересно, в mssql 2000 можно как-нибудь нормально в mssql переделать свою транзакцию, чтобы реализация была больше похоже на реализацию снапшот изоляции в mssql 2005
Оставить комментарий
Имя или ник:
Комментарий: