Введение в системы БД (542480), страница 150
Текст из файла (страница 150)
Основная проблема заключается в том, что сложные транзакции в этих прикладных областях могут продолжаться в те- 15.1. 588 Часть 1е. Управление гпранзакциялти (Т12) (т1г) (Т2! (Т11) (Т12) (т10) (т1г) (Т4) КЕТК1ЕЧЕ 0 КЕТК1ЕЧЕ С ~ ВРВАтЕ Р ВРВАТЕ С КЕТК1ЕЧЕ А ВРВАТЕ А ВРВАТЕ 0 КЕТК1ЕЧЕ 6 чение часов или даже дней вместо нескольких миллисекунд, что типично для большинства традиционных систем обработки данных. Это может привести к следующим последствиям. !. Полный откат транзакции к самому началу может вызвать потерю слишком большого объема уже проделанной работы, что совершенно неприемлемо. 2.
Использование обычных блокировок может иметь следствием появление чрезмерных задержек, вызванных ожиданием снятия блокировок требуемых элементов, что также неприемлемо. В этой работе описывается один из методов устранения подобных недостатков (см. также (!5.71, [15.1!1-(!5.!3), (!5.!7!), а именно — метод управления параллельностью, называемый многовариантной блокировкой (пшй1-чегз!оп !ос!с!пя; иначе может называться многовариантным считыванием [пш!г1-чегзюп геад)), который уже используется в нескольких программных продуктах. Основное преимушество этого метода заключается в том, что операции считывания выполняются без вынужденного ожидания, т.е.
любое количество операций считывания и одна операция записи могут выполняться для одного и того же объекта одновременно. Точнее говоря, выполняются следующие правила. ° Операция чтения всегда выполняется без задержки [как только что говорилось). ° Операции чтения никогда не задерживают выполнение операций обновления. ° Откат транзакций, выполняющих только чтение, не имеет смысла и никогда не осуществляется. ° Ситуация взаимной блокировки может возникнуть только между транзакциями обновления.
Указанные преимущества особенно важны для распределенных систем (см. главу 20), в которых на выполнение обновления данных может потребоваться значительное время, а потому выполнение запросов, включающих только операции чтения, может чрезмерно затянуться [н наоборот). Основную идею данного метода можно сформулировать следующим образом. ° Если транзакция Т2 пытается выполнить операцию считывания объекта, для которого в данный момент выполняется обновление в пределах транзакции Т1, то транзакции Т2 предоставляется доступ к предварительно зафиксированному варианту этого объекта. Такой вариант обычно хранится в каком-то особом месте системы [как правило, в журнале регистрации) и предназначается для восстановления последнего состояния системы. ° Если транзакция Т2 пытается выполнить операцию обновления объекта, который в данный момент считывается транзакцией Т1, то транзакции Т2 предоставляется доступ к этому объекту, тогда как транзакции Т1 предоставляется доступ к некоторому варианту этого объекта [который в действительности является предварительным вариантом).
° Если транзакция Т2 пытается выполнить операцию обновления объекта, который в данный момент обновляется транзакцией Т1, то транзакция Т2 переходит Глава 15. Параллельность 589 в состояние ожиданияз (таким образом, как отмечалось выше, в системе может возникнуть ситуация взаимной блокировки, для устранения которой потребуется принудительный откат одной из транзакций). Конечно, этот метод предусматривает наличие соответствующих элементов управления, необходимых для получения гарантий, что каждая транзакция всегда будет иметь дело с непротиворечивым состоянием базы данных.
Вегепзоп Н, ег а!. А Сг(г(йце о( А)451 ЯО). 1ьо!акоп 1.ече1з 0 Ргос. 1995 АСМ Б!ОМОР 1пь Сопб оп Мапайешепг ог" Раза. — Бал 5озе, Са!!г"., Мау, ! 995. В этой статье критически оценивается предпринятая в стандарте Я( Н. попытка оха- рактеризовать уровни изоляции на основе нарушений упорядочиваемости (см, раз- дел !5.9). "!Эти! определения не способны должным образом охарактеризовать не- 15.2.
сколько широко распространенных уровней изоляции, включая стандартные способы реализации блокировок лля упомянутых уровней." В частности, в этой статье под- черкивается, что данный стандарт не способен запретить некорректное считывание (которое определяется, как вероятность того, что две транзакции, Т1 и Т2, смогут вы- полнить обновление одной и той же строки до завершения какой-либо из них). Похоже, что это действительно так, поскольку в данном стандарте некорректное считывание не запрещено явным образом. Вот несколько перефразированных цитат из этой работы.
° "Выполнение параллельных транзакций на уровне изоляции ЯЕК1АРТЕАВРЕ гарантированно является упорядоченным." Иначе говоря, если все транзакции выполняются на уровне изоляции ЯЕК1АР1ЕАВРЕ, в реализации требуется запретить операции некорректного считывания, поскольку они будут нарушать упорядоченность графика. ° "Четыре уровня изоляции гарантируют, что... никакие обновления не будут утраченыр Это утверждение на самом деле является лишь благим пожеланием, поскольку сами определения четырех уровней изоляции не дают подобных гарантий.
Однако оно указывает на то, что создатели стандарта предполагают запрещение операций некорректного считывания. ° "Изменения, выполненные одной транзакцией, не могут быть восприняты другими транзакциями (за исключением транзакций на уровне КЕАР ВНСОИМ1ТТЕР) до тех пор, пока ее выполнение не будет зафиксировано." Что в данном контексте означает слово воспринятыТ Может ли транзакция обновить часть "неаккуратно считываемых данных" без их "восприятия"? Замечание. Все эти замечания взяты из работы (4.191. Вегпыеш Р.А., Ооодшап )ч1. Т!шезгашр-Вазед А!Еог!1Ьзпз гог Сопсштепсу Сон!го! 1и РВгпЬшеб РагаЬазе Бумешз 0 Ргос. бгй 1пгегп. СопГ. оп чзегу ЬагЕе Раса Вазез.— Мопггеа!, Сапада, ОсгоЬег, 1980. 15.3. В работе рассматриваются некоторые методы управления параллельностью, в основу которых положена не блокировка, а временные отметки.
Основная идея заключается в том, что если транзакция А начинает выполняться раньше тран- 590 Часть 1'з( Управление транзакциями З Иначе говоря, конфликты могут происходить только мемеду операциями обновления и для их устранения используется механизм блокировки. Однако для устранения конфликтов, безусловно, могут использоваться и другие методы, например временные отметки 115.51, закции В, то система ведет себя так, как будто выполнение транзакции А полностью завершилось еше до начала выполнения транзакции В (как это имеет место в последовательном графике запуска).
Таким образом, для транзакции а будут недоступны любые обновления, выполняемые транзакцией В. Кроме того, она не сможет обновить объект, уже считанный транзакцией В. Подобная схема управления может быть организована следующим образом. Для каждого запроса к базе данных система сравнивает временную отметку транзакции этого запроса с временной отметкой транзакции, выполнившей последнее считывание или обновление запрашиваемого кортежа. В случае конфликта транзакция запроса может быть перезапущена с новой временной меткой (так же, как и в случае с оптимистическими методами [15.14)). Как следует из заголовка этой работы, данная методика была изначально создана в контексте распределенной системы (где использование блокировки сопряжено с возникновением нежелательных накладных расходов из-за отправки сообщений для проверки и установки блокировок). Однако такая методика почти наверняка не годится лля нераспределенных систем.
Кроме того, существует достаточно скептическое отношение к практичности ее использования даже для распределенных систем. Одной очевидной проблемой является то, что каждый кортеж должен содержать временную метку последней транзакции, которая считывала данные этого кортежа (а также временную метку последней транзакции, которая обновляла данные этого кортежа). В таком случае подразумевается, что каждая операция чтения становится операцией записи! Действительно, в 114.121 утверждается, что такая схема на самом деле является частным случаем схем оптимистического метода управления параллельностью !!5.!4), для которых, в свою очередь, характерны собственные проблемы.
15.4. В!азяеп М.чч'., Огау 1.)ч., Мйоша М., Рпсе Т.О. ТЬе Сопчоу Рпепошепоп й АСМ Орегайпд бузгешз Кеч!еи. — Арп1, 1979. — 13, № 2. Проблема образования верениц возникает при использовании механизма блокировок для интенсивно применяемых элементов данных. Примером может служить установка блокировки перед выполнением операции записи в журнал регистрации в системах с приоритетным планированием. Замечание. Здесь понятие планирования относится к проблеме распределения машинных циклов среди выполняемых транзакций, а не к чередованию операций, принадлежащих различным транзакциям, что обсуждалось ранее в настоящей главе. Эта проблема может быть пояснена следующим образом.