- •Часть IV
- •Глава 13 Восстановление
- •13.1. Введение
- •13.2. Транзакции
- •13.3. Восстановление транзакции
- •13.4. Восстановление системы
- •13.5. Восстановление носителей
- •13.6. Двухфазная фиксация
- •13.7. Поддержка языка sql
- •13.8. Резюме
- •Глава 14 Параллелизм
- •14.1. Введение
- •14.2. Три проблемы параллелизма
- •14.3. Блокировка
- •14.4. Решение проблем параллелизма
- •14.5. Тупиковая ситуация
- •14.6. Способность к упорядочению
- •14.7. Уровни изоляции
- •14.8. Преднамеренная блокировка
- •IX s
- •14.9. Поддержка блокировок в sql
- •14.10. Резюме
- •14.13. Papadimitriou с. The Theory of Database Concurrency Control.— Rockville, Md.: Computer Science Press, 1986.
- •Глава 15 Безопасность
- •15.1. Введение
- •15.2. Общие соображения
- •15.3. Избирательное управление доступом
- •15.4. Модификация запроса
- •15.5. Обязательное управление доступом
- •15.6. Шифрование данных
- •Стандарт шифрования данных
- •15.7. Поддержка мер обеспечения безопасности в языке sql
- •15.8. Резюме
14.7. Уровни изоляции
Термин уровень изоляции, грубо говоря, используется для описания степени вмешательства параллельных транзакций в работу некоторой заданной транзакции. Но при обеспечении возможности упорядочения не допускается никакого вмешательства, иначе говоря, уровень изоляции должен быть максимальным. Однако, как уже отмечалось в конце предыдущего раздела, в реальных системах по различным причинам обычно допускаются транзакции, которые работают на уровне изоляции ниже максимального.
Замечание. Уровень изоляции обычно рассматривается как некоторое свойство транзакции. В действительности нет никаких причин, по которым данная транзакция не могла бы работать в одно и то же время на различных уровнях изоляции в разных частях базы данных. Однако здесь для простоты уровень изоляции будет рассматриваться всего лишь как некоторое свойство транзакции.
Уровней изоляции может быть несколько, например в [14.4] их задано пять, в [14.9], как и в стандарте языка SQL, — четыре, а в системе DB2 фирмы IBM поддерживается два уровня. Вообще говоря, чем выше уровень изоляции, тем меньше степень вмешательства (и параллелизма), а чем ниже уровень изоляции, тем больше степень вмешательства (и параллелизма). В качестве примера рассмотрим два уровня, поддерживаемых системой DB2, которые называются уровнями стабильности курсора и повторяемого считывания. Уровень повторяемого считывания (ПС) является максимальным уровнем; причем если все транзакции действуют на этом уровне, то графики запуска обладают возможностью упорядочения (при изложении материала выше в этой главе по умолчанию полагалось, что все транзакции выполняются именно на этом уровне изоляции). Уровню стабильности курсора (СК) для транзакции T1 присущи несколько другие особенности:
• транзакция адресуется к некоторому кортежу p(///),
• таким образом задается блокировка для кортежа p,
• после этого снимается адресуемость к кортежу р без его обновления,
• уровень Х-блокировки не достигается,
• в результате блокировка снимается без необходимости ожидания окончания выполнения транзакции.
/// Название "уровень стабильности курсора" происходит от того, что обращение к кортежу осуществляется с помощью установки курсора для заданного кортежа (это обсуждалось в предыдущих главах книги). Следует уточнить, что в системе DB2 блокировка 77, наложенная на кортеж р, является блокировкой "обновления" (U-блокировка), а не блокировкой с возможностью взаимного доступа (S-блокировка). U-блокировки совместимы с S-блокировками, но не с другими U-блокировками и, конечно, не с другими X-блокировками. Далее эти уточнения не будут приниматься во внимание.///
Обратите внимание, что теперь некоторая другая транзакция Т2 может привести к обновлению кортежа p и внесению в него изменений. Если транзакция T1 вновь обратится к кортежу p, эти изменения будут обнаружены, что может привести к несовместимому состоянию базы данных. На уровне ПС, наоборот, все блокировки кортежа (а не только Х-блокировки) сохраняются до окончания выполнения транзакции и упомянутой выше проблемы не возникает.
Замечание. Описанная проблема не единственная, которая может возникнуть на уровне СК, просто ее легче всего объяснить. Однако она, к сожалению, приводит к выводу, что уровень ПС необходим только в сравнительно маловероятных случаях, когда данная транзакция дважды выполняется для одного и того же кортежа. Однако существуют аргументы в защиту повсеместного использования уровня ПС по сравнению с уровнем СК. Дело в том, что выполнение транзакции на уровне СК не является двухфазным, а потому (как разъяснялось выше) в этом случае возможность упорядочения не гарантируется. В качестве контраргумента следует указать тот факт, что на уровне СК достигается более широкий параллелизм, чем на уровне ПС (такая ситуация возможна, но вовсе не обязательна).
В заключение следует отметить, что предшествующая характеристика уровня ПС как уровня максимальной изоляции относится к уровню ПС, воплощенному в системе DB2. К сожалению, в стандарте языка SQL тот же термин "повторяемость считывания" используется для описания уровня изоляции, который находится ниже максимального уровня. Подробнее это описано ниже в данной главе.