Читать реферат по информатике, вычислительной технике, телекоммуникациям: "Версионность в Yukon" Страница 10
картину, характерную для обычного блокировочика.
| Тип | Описание | Объект | Режим | Статус | spid |
| TAB | 1963154039 | IX | GRANT | 51 | |
| RID | 1:1357:2 | 72057594057326592 | U | WAIT | 51 |
| PAG | 1:1357 | 72057594057326592 | IU | GRANT | 51 |
| TAB | 1963154039 | IX | GRANT | 52 | |
| RID | 1:1357:2 | 72057594057326592 | X | GRANT | 52 |
| PAG | 1:1357 | 72057594057326592 | IX | GRANT | 52 |
Таблица 3
Snapshot-транзакция (spid 52) ожидает на блокировке (U – WAIT), пока освободится нужная запись (RID 1:1357:2), заблокированная другой транзакцией (spid 51) монопольно (X - GRANT).
Если сейчас вернуться в первое окно и откатить блокирующую транзакцию, то snapshot совершенно спокойно выполнит свое обновление и зафиксируется. Однако если блокирующую транзакцию зафиксировать, то, в отличие от блокировочного поведения, snapshot-транзакция будет отменена, и клиентское приложение получит сообщение об ошибке:
| .Net SqlClient Data Provider: Msg 3960, Level 16, State 1, Line 1 Cannot use snapshot isolation to access table 'tst' in database 'AdventureWorks'.Snapshot transaction aborted due to update conflict. Retry transaction. |
Более того, для отката snapshot-транзакции ей даже не нужно ожидать снятия блокировки. Чтобы избежать несогласованного изменения, необходимо производить откат даже в том случае, если после старта snapshot-транзакции одна из записей, необходимых для пишущего запроса, была изменена другой транзакцией, успевшей зафиксироваться.
Если в одном из подключений начать snapshot-транзакцию, сделав простую выборку:
| SET TRANSACTION ISOLATION LEVEL SNAPSHOT BEGIN TRANSELECT * FROM tst |
Затем в другом подключении изменить какую-нибудь запись:
| BEGIN TRANUPDATE tst SET y=3 WHERE x=3 COMMIT TRAN |
А потом попытаться изменить эту же запись из snapshot-транзакции:
| UPDATE tst SET y=3 WHERE x=3COMMIT TRAN |
То snapshot транзакция успехом не увенчается, а будет отменена по причине конфликта версий.
Дело в том, что если существует транзакция, зафиксированная после начала работы snapshot-транзакции, и изменения этой транзакции попадают в условия выборки, сделанной snapshot-транзакцией, то вполне могут существовать записи, которые были изменены этой транзакцией после того, как snapshot-запрос их просмотрел, таким образом, что они стали удовлетворять условию snapshot-выборки. То есть получается, что snapshot-транзакция может увидеть только часть изменений, сделанных другой транзакцией, а этого допустить нельзя.
В данном случае поведение Yukon очень похоже на версионное. Но на самом деле он все равно ведет себя немного «по-блокировочному». Проявляется это, например, все в той же ситуации с отсутствием индексов.
Если еще раз выполнить блокирующую транзакцию, не фиксируя ее:
| BEGIN TRANUPDATE tst SET y=3 WHERE x=3 |
А потом попробовать изменить другую запись из snapshot транзакции:
| SET TRANSACTION ISOLATION LEVEL SNAPSHOT BEGIN TRANUPDATE tst SET y=-1 WHERE x=4COMMIT TRAN |
То snapshot транзакция все равно окажется заблокированной.
| Тип | Описание | Объект | Режим | Статус | spid |
| RID | 1:1357:2 |
Похожие работы
| Тема: Версионность в Yukon |
| Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
| Тема: Yukon Settlement Essay Research Paper Yukon SettlementBy |
| Предмет/Тип: Английский (Реферат) |
| Тема: MSSQL 2005 (Yukon) – работа с очередями и асинхронная обработка данных |
| Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
| Тема: Новые возможности MS SQL Server 2004 "Yukon" |
| Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
| Тема: MS SQL Server 9 “Yukon”. Интеграция с .NET |
| Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
Интересная статья: Основы написания курсовой работы

(Назад)
(Cкачать работу)