Распределенная обработка данных. Найханова Л.В. - 57 стр.

UptoLike

Составители: 

57
реальных системах обычно предусмотрено использование не двухфазных транзакций, а
транзакций сранним снятием блокировки” (еще до выполнения операции прекращения
транзакции) и наложением нескольких блокировок. Однако следует понимать, что
использование таких транзакций сопряжено с большим риском. Действительно, при
использовании недвухфазной транзакции А предполагается, что в данной системе не
существует никакой другой чередующейся с ней транзакции В (в противном случае в
системе возможно получение ошибочных результатов).
Уровни изоляции
Термин уровень изоляции, грубо говоря, используется для описания степени вме-
шательства параллельных транзакций в работу некоторой заданной транзакции. Но при
обеспечении возможности упорядочения не допускается никакого вмешательства, иначе
говоря, уровень изоляции должен быть максимальным. Однако, как уже отмечалось в
конце предыдущего раздела, в реальных системах по различным причинам обычно
допускаются транзакции, которые работают на уровне изоляции ниже максимального.
Замечание. Уровень изоляции обычно рассматривается как некоторое свойство
транзакции. В действительности нет никаких причин, по которым данная транзакция не
могла бы работать в одно и то же время на различных уровнях изоляции в разных частях
базы данных. Однако здесь для простоты уровень изоляции будет рассматриваться всего
лишь как некоторое свойство транзакции.
Уровней изоляции может быть несколько, например, в стандарте языка SQL, -
четыре, а в системе DВ2 фирмы IВМ поддерживается два уровня. Вообще говоря, чем
выше уровень изоляции, тем меньше степень вмешательства (и параллелизма), а чем ниже
уровень изоляции, тем больше степень вмешательства (и параллелизма). В качестве
примера рассмотрим два уровня, поддерживаемых системой DB2, которые называются
уровнями стабильности курсора и повторяемого считывания. Уровень повторяемого
считывания (ПС) является максимальным уровнем; причем если все транзакции
действуют на этом уровне, то графики запуска обладают возможностью упорядочения
(при изложении материала выше по умолчанию полагалось, что все транзакции
выполняются именно на этом уровне изоляции). Уровню стабильности курсора (СК) для
транзакции Т
1
присущи несколько другие особенности:
транзакция адресуется к некоторому кортежу p,
таким образом задается блокировка для кортежа p,
после этого снимается адресуемость к кортежу p без его обновления,
уровень Х-блокировки не достигается,
в результате блокировка снимается без необходимости ожидания окончания вы-
полнения транзакции.
Обратите внимание, что теперь некоторая другая транзакция Т
2
может привести к
обновлению кортежа p и внесению в него изменений. Если транзакция T
1
вновь обратится
к кортежу p, эти изменения будут обнаружены, что может привести к несовместимому
состоянию базы данных. На уровне ПС, наоборот, все блокировки кортежа (а не только Х-
блокировки) сохраняются до окончания выполнения транзакции и упомянутой выше
проблемы не возникает.
Замечание. Описанная проблема не единственная, которая может возникнуть на
уровне СК, просто ее легче всего объяснить. Однако она, к сожалению, приводит к
выводу, что уровень ПС необходим только в сравнительно маловероятных случаях, когда
данная транзакция дважды выполняется для одного и того же кортежа. Однако
существуют аргументы в защиту повсеместного использования уровня ПС по сравнению
с уровнем СК. Дело в том, что выполнение транзакции на уровне СК не является
двухфазным, а потому (как разъяснялось выше) в этом случае возможность упорядочения
не гарантируется. В качестве контраргумента следует указать тот факт, что на уровне СК
реальных системах обычно предусмотрено использование не двухфазных транзакций, а
транзакций с “ранним снятием блокировки” (еще до выполнения операции прекращения
транзакции) и наложением нескольких блокировок. Однако следует понимать, что
использование таких транзакций сопряжено с большим риском. Действительно, при
использовании недвухфазной транзакции А предполагается, что в данной системе не
существует никакой другой чередующейся с ней транзакции В (в противном случае в
системе возможно получение ошибочных результатов).
Уровни изоляции
     Термин уровень изоляции, грубо говоря, используется для описания степени вме-
шательства параллельных транзакций в работу некоторой заданной транзакции. Но при
обеспечении возможности упорядочения не допускается никакого вмешательства, иначе
говоря, уровень изоляции должен быть максимальным. Однако, как уже отмечалось в
конце предыдущего раздела, в реальных системах по различным причинам обычно
допускаются транзакции, которые работают на уровне изоляции ниже максимального.
     Замечание. Уровень изоляции обычно рассматривается как некоторое свойство
транзакции. В действительности нет никаких причин, по которым данная транзакция не
могла бы работать в одно и то же время на различных уровнях изоляции в разных частях
базы данных. Однако здесь для простоты уровень изоляции будет рассматриваться всего
лишь как некоторое свойство транзакции.
     Уровней изоляции может быть несколько, например, в стандарте языка SQL, -
четыре, а в системе DВ2 фирмы IВМ поддерживается два уровня. Вообще говоря, чем
выше уровень изоляции, тем меньше степень вмешательства (и параллелизма), а чем ниже
уровень изоляции, тем больше степень вмешательства (и параллелизма). В качестве
примера рассмотрим два уровня, поддерживаемых системой DB2, которые называются
уровнями стабильности курсора и повторяемого считывания. Уровень повторяемого
считывания (ПС) является максимальным уровнем; причем если все транзакции
действуют на этом уровне, то графики запуска обладают возможностью упорядочения
(при изложении материала выше по умолчанию полагалось, что все транзакции
выполняются именно на этом уровне изоляции). Уровню стабильности курсора (СК) для
транзакции Т1 присущи несколько другие особенности:
     • транзакция адресуется к некоторому кортежу p,
     • таким образом задается блокировка для кортежа p,
     • после этого снимается адресуемость к кортежу p без его обновления,
     • уровень Х-блокировки не достигается,
     • в результате блокировка снимается без необходимости ожидания окончания вы-
        полнения транзакции.
     Обратите внимание, что теперь некоторая другая транзакция Т2 может привести к
обновлению кортежа p и внесению в него изменений. Если транзакция T1 вновь обратится
к кортежу p, эти изменения будут обнаружены, что может привести к несовместимому
состоянию базы данных. На уровне ПС, наоборот, все блокировки кортежа (а не только Х-
блокировки) сохраняются до окончания выполнения транзакции и упомянутой выше
проблемы не возникает.
     Замечание. Описанная проблема не единственная, которая может возникнуть на
уровне СК, просто ее легче всего объяснить. Однако она, к сожалению, приводит к
выводу, что уровень ПС необходим только в сравнительно маловероятных случаях, когда
данная транзакция дважды выполняется для одного и того же кортежа. Однако
существуют аргументы в защиту повсеместного использования уровня ПС по сравнению
с уровнем СК. Дело в том, что выполнение транзакции на уровне СК не является
двухфазным, а потому (как разъяснялось выше) в этом случае возможность упорядочения
не гарантируется. В качестве контраргумента следует указать тот факт, что на уровне СК

                                                                                    57