Скачиваний:
42
Добавлен:
01.04.2014
Размер:
539.65 Кб
Скачать

14.13. Papadimitriou с. The Theory of Database Concurrency Control.— Rockville, Md.: Computer Science Press, 1986.

Учебное пособие, в котором особое внимание уделяется формальной теории.

Ответы к некоторым упражнениям

14.3. а) Существует три корректных результата, соответствующих шести возмож­ным последовательным графикам запуска:

Начальное значение : А = О

Т1-Т2-ТЗ : А = 1

Т1-ТЗ-Т2 : А = 2

Т2-Т1-ТЗ : А = 1

Т2-ТЗ-Т1 : А = 2

ТЗ-Т1-Т2 : А = 4

ТЗ-Т2-Т1 : А = 3

Конечно, не все шесть полученных результатов отличаются. Фактически, в данном примере так получилось потому, что благодаря смыслу транзакции ТЗ возможные правильные результаты независимы от начального состояния базы данных.

б) Существует 90 возможных различных графиков запуска, которые можно представить в приведенном ниже символическом виде. (Здесь Ri, Rj, Rk обо­значают операции извлечения R1, R2, R3, причем не обязательно в той же по­следовательности. Аналогично, Up, Uq, Ur обозначают операции обновления U7, U2, U3, также не обязательно в той же последовательности.)

Ri-Rj-Rk-Up-Uq-Ur : 3*2*1*3*2*1= 36 вариантов

Ri-Rj-Up-Rk-Uq-Ur : 3*2*2*1*2*1= 24 вариантов

Ri-Rj-Up-Uq-Rk-Ur : 3*2*2*1*1*1=12 вариантов

Ri-Up-Rj-Rk-Uq-Ur : 3*1*2*1*2*1= =12 вариантов

Ri-Up-Rj-Uq-Rk-Ur : 3*1*2*1*1*1= 6 вариантов

Всего = 90 вариантов

в) Да. Например, график запуска R1-R2-R3-U3-U2-U1 приводит к тому же ре­зультату (единица) для заданного начального значения (нуль), как и два из шести возможных последовательных графиков запуска. (Упражнение. Проверьте это утверждение.) Однако следует понимать, что "корректность" по­лученного результата является всего лишь счастливой случайностью и след­ствием того, что исходное значение было равно 0, а не какому-то другому значению. В качестве примера обратной ситуации рассмотрите случай, в ко­тором исходное значение равно 10. Будет ли показанный выше график запус­ка приводить к одному из действительно корректных результатов? (Какие в этом случае будут действительно корректные результаты?) Если нет, то гра­фик запуска R1-R2-R3-U3-U2-U1 не допускает упорядочения.

г) Да. Например, график запуска R1-R3-U1-U3-R2-U2 допускает упорядочение (он эквивалентен последовательному графику запуска Т1-Т2-ТЗ), но не может быть получен, если T1, T2 и T3 подчиняются двухфазному протоколу блоки­ровки. В таком случае для выполнения операции R3 потребуется с согласия транзакции ТЗ задать S-блокировку для А. Тогда операция U1 в транзакции T1 не будет выполняться до тех пор, пока не будет снята блокировка, а это не про­изойдет до завершения выполнения транзакции ТЗ (действительно, при дости­жении операции U3 транзакции ТЗ и T1 попадут в тупиковую ситуацию).

Это упражнение прекрасно иллюстрирует следующий очень важный момент. Пусть для данного набора транзакций и начального состояния базы данных зада­но множество всех возможных графиков запуска (ВСЕ), содержащих эти тран­закции, множество всех графиков запуска (ПРАВИЛЬНЫЕ), которые гарантиро­ванно приводят к корректному финальному состоянию или, по крайней мере, мо­гут привести к нему для некоторого начального состояния, множество всех способных к упорядочению графиков запуска (ДОПУСКАЮЩИЕ УПОРЯДО­ЧЕНИЕ), а также множество всех графиков запуска (РЕЗУЛЬТАТИВНЫЕ), ко­торые приводят к корректному результату согласно двухфазному протоколу бло­кировки. Тогда вообще будет верно следующее утверждение (здесь знак "<=' обо­значает "подмножество"):

РЕЗУЛЬТАТИВНЫЕ <= ДОПУСКАЮЩИЕ УПОРЯДОЧЕНИЕ <= ПРАВИЛЬНЫЕ <= ВСЕ

14.4. В момент времени tn ни одна из транзакций вовсе не выполнит никакой по­лезной работы! Дело в том, что будет существовать одна тупиковая ситуация, включающая транзакции T2,T2,T9 и Т8. Кроме того, транзакция Т4 находит­ся в состоянии ожидания (ожидает) завершения выполнения транзакции Т9, транзакция 772 ожидает завершения выполнения транзакции Т4, а транзак­ции Т10 и T11 ожидают завершения выполнения транзакции T2. Эту ситуа­цию можно представить с помощью приведенной на рис. 14.14 диаграммы состояний ожидания, в которой узлы представляют собой транзакции, а стрелка от узла Ti к узлу Tj указывает на то, что транзакция Ti находится в состоянии ожидания завершения выполнения транзакции Тj. Возле стрелок размещены названия объектов базы данных с указанием в скобках уровня блокировки, на котором они находятся в состоянии ожидания.

T10 T11

A ( X ) C ( X )

T12

D ( X )

T4

G ( S )

H ( X )

T9 T8

G ( S ) E ( S )

T3 T2

F ( X )

Рис. 14.14. Диаграмма состояний ожидания для упр. 14.4

14.5. Для задач, приведенных на рис. 14.1-14.3, уровень изоляции стабильности кур­сора обладает тем же эффектом, что и уровень повторяемого считывания (обратите внимание, однако, что для системы DB2 это утверждение не приме­нимо к уровню стабильности курсора из-за того, что в системе DB2 вместо S-блокировок используются U-блокировки). Что касается проблемы несовмес­тимого анализа (см. рис. 14.4), то уровень изоляции стабильности курсора не позволяет разрешить эту проблему. Дело в том, что транзакция А должна вы­полняться на уровне повторяемости считывания для того, чтобы сохранить все блокировки до завершения выполнения транзакции, иначе будет получен не­верный результат. (Конечно, если система поддерживает такой режим, то в ка­честве альтернативного варианта можно было бы с помощью транзакции А полностью заблокировать все отношение счетов с помощью некоторой явно заданной блокировки. Это решение можно было бы использовать для уровней изоляции стабильности курсора и повторяемости считывания.)

14.9. В этой главе были рассмотрены три проблемы параллелизма, а именно: про­блемы потери результатов обновления, незафиксированной зависимости и несовместимого анализа.

Потеря результатов обновления. Согласно стандарту языка SQL требуется, чтобы (при любых обстоятельствах) никогда не возникала проблема потери результатов обновления.

Незафиксированная зависимость. Это всего лишь иное название проблемы неаккуратного считывания.

Несовместимый анализ. Этим термином обозначаются как проблема непо­вторяемого считывания, так и проблема фиктивных элементов.

Соседние файлы в папке Дейтл Введ в БД