Единое окно доступа к образовательным ресурсам

Введение в системы баз данных: Учебное пособие

Голосов: 3

В пособии рассматриваются основные понятия и определения, современное состояние технологий баз данных, архитектура СУБД, концепции проектирования БД, модели данных, реляционная модель данных, проектирование базы данных, физическая организация данных, управление реляционной базой данных, язык SQL, обеспечение функционирования баз данных.

Приведенный ниже текст получен путем автоматического извлечения из оригинального PDF-документа и предназначен для предварительного просмотра.
Изображения (картинки, формулы, графики) отсутствуют.
          Отказы носителей (например, поломка головок дискового
накопителя), которые могут представлять угрозу для БД или для какой
либо ее части и поражать, по крайней мере, те транзакции, которые
используют эту часть БД. Отказы носителей называют также аварийным
отказом аппаратуры.
      Критической точкой в отказе системы является потеря содержимого
оперативной памяти (рабочих буферов БД). Поскольку точное состояние
какой либо выполняющейся в момент нарушения транзакции не известно,
транзакция может не завершиться успешно и, таким образом, будет
отменена при перезагрузке системы.
      Более того, возможно, потребуется повторно выполнить
определенную успешно завершившуюся до аварийного отказа транзакцию
при перезагрузке системы, если не были физически выполнены
обновления этой транзакции.
      Решение вопроса о том, какую транзакцию следует отменить, а
какую выполнить повторно, при перезагрузке системы заключается в
следующем. В некотором предписанном интервале (когда в журнале
накапливается определенное число записей) система автоматически
принимает контрольную точку. Принятие контрольной точки включает
физическую запись содержимого рабочих буферов БД непосредственно в
БД и специальную физическую запись контрольной точки, которая
предоставляет список всех осуществляемых в данный момент транзакций.
На рис.10.2. рассматривается пять возможных вариантов выполнения
транзакций до аварийного сбоя системы.



   T1
   T2
   T3
   T4
   T5


                  Контрольная точка (Tc)             Отказ системы (Tf)

                    Рис. 10.2. Варианты транзакции

      Очевидно, что при перезагрузке системы транзакции типа T3 и T5
должны быть отменены, а транзакции типа T2 и T4 – выполнены повторно,
а транзакции типа T1 вообще не включаются в процесс перезагрузки, так
как обновления попали в БД еще до момента времени Tc, т.е.
зафиксированы еще до принятия контрольной точки.


                                     122


      Следовательно, во время перезагрузки система вначале проходит
через процедуру идентификации всех транзакций типа T2-T5. при этом
выполняются перечисленные ниже шаги.
   1. Создаются два списка транзакций: будем их называть UNDO
      (отменить) и REDO (повторить). В список UNDO заносятся все
      транзакции, предоставленные из записи контрольной точки (т.е. все
      транзакции, выполняющиеся в момент времени Tc), а список REDO
      остается пустым.
   2. Осуществляется поиск в файле регистрации (журнале), начиная с
      записи контрольной точки.
   3. Если в файле регистрации обнаружена запись Begin Transaction о
      начале транзакции T, то эта транзакция также добавляется в список
      UNDO.
   4. Если в файле регистрации обнаружена запись Commit об окончании
      транзакции T, то эта транзакция добавляется в список REDO.
   5. Когда достигается конец файла регистрации, списки и REDO
      анализируются для идентификации транзакций типа T2 и T4,
      появившихся в списке REDO и транзакций типа T3 и T5, оставшихся
      в списке UNDO.
      После этого система просматривает файл регистрации, отменяя
транзакции из списка UNDO, а затем просматривает снова вперед,
повторно выполняя транзакции из списка REDO.

10.3. Восстановление носителей
      При отказе носителей некоторая часть БД разрушается физически.
Восстановление после такого нарушения включает перезапись (или
восстановление) БД с резервной копии (или дампа) и последующее
использование файла регистрации – как его активной, так и архивной
части. Такое восстановление – это повторное выполнение всех транзакций,
вызванное применением резервной копии. При этом нет необходимости
отмены транзакций, которые выполнялись в момент отказа носителей,
поскольку по определению все обновления таких транзакций полностью
утеряны.
      Таким образом, восстановление подразумевает наличие утилиты
дамп/восстановление. Дамп-часть этой утилиты используется для
сохранения резервной копии. Такие копии могут сохраняться либо на
ленте, либо другим архивным способом. После отказа носителей
восстановительная часть утилиты используется для создания БД со
специализированной резервной копии.

10.4. Параллелизм
      Параллелизм означает возможность одновременной обработки в
СУБД многих транзакций с доступом к одним и тем же данным, причем в


                                  123


одно и то же время. В такой системе для корректной обработки
параллельных транзакций без возникновения конфликтных ситуаций
необходимо использовать некоторый метод управления параллелизмом.

     Три проблемы параллелизма
     Прежде всего следует уточнить, что каждый метод управления
параллелизмом предназначен для решения некоторой конкретной задачи.
Тем не менее, при обработке правильно составленных транзакций
возникают ситуации, которые могут привести к получению неправильного
результата из-за взаимных помех среди некоторых транзакций. Основные
проблемы, возникающие при параллельной обработке транзакций
следующие:
     потеря результатов обновления;
     незафиксированная зависимость;
     несовместимый анализ.

     Проблема потери результатов обновления
     Рассмотрим ситуацию, показанную на рис.10.3.

            Транзакция А        Время         Транзакция В
     Извлечение кортежа p       t1
                                t2    Извлечение кортежа p
     Обновление кортежа p       t3
                                t4    Обновление кортежа p
      Рис.10.3. Потеря в момент времени t4 результатов обновления,
                      выполненного транзакцией А

     Результат операции обновления, выполненной транзакцией А, будет
утерян, поскольку в момент времени t4 она не будет учтена и потому будет
«отменена» операцией обновления, выполненной транзакцией В.

     Проблема незафиксированной зависимости
     Проблема незафиксированной зависимости появляется, если с
помощью некоторой транзакции осуществляется извлечение (или, что еще
хуже, обновление) некоторого кортежа, который в данный момент
обновляется другой транзакцией, но это обновление еще не закончено.
Таким образом, если обновление не завершено, существует некоторая
вероятность того, что оно не будет завершено никогда. В таком случае в
первой транзакции будут принимать участие данные, которых больше не
существует (в том смысле, что они «никогда» не существовали). Эта
ситуация показана на рис.10.4 и рис.10.5.




                                  124


            Транзакция А          Время         Транзакция В
                                  t1    Обновление кортежа p
     Извлечение кортежа p         t2
                                  t3    Отмена выполнения транзакции
    Рис.10.4. Транзакция А становится зависимой от невыполненного
                     изменения в момент времени t2

            Транзакция А          Время         Транзакция В
                                  t1    Обновление кортежа p
     Обновление кортежа p         t2
                                  t3    Отмена выполнения транзакции
   Рис.5. Транзакция А обновляет невыполненное изменение в момент
   времени t2, и результаты этого обновления утрачиваются в момент
                               времени t3

     Проблема несовместимого анализа
     На рис.6. показаны транзакции А и В, которые выполняются для
кортежей со счетами. При этом транзакция А суммирует балансы,
транзакция В производит перевод суммы 10 со счета 3 на счет 1.
полученный в итоге транзакции А результат 110, очевидно, неверен, и если
он будет записан в базе данных, то в ней может возникнуть проблема
несовместимость. В таком случае говорят, что транзакция А встретилась с
несовместимым состоянием и на его основе был выполнен несовместимый
анализ.

     Счет 1 – 40, Счет2 – 50, Счет3 - 30
             Транзакция А            Время         Транзакция В
     Извлечение кортежа Счет 1       t1
     Sum=40
     Извлечение кортежа Счет 2       t2
     Sum=90
                                     t3    Извлечение кортежа Счет 3
                                     t4    Обновление кортежа Счет 3
                                           30 20
                                     t5    Извлечение кортежа Счет 1
                                     t6    Обновление кортежа Счет 1
                                           40 50
                                     t7    Завершение транзакции
     Извлечение кортежа Счет 3       t8
     Sum = 110 ( а не 120)
        Рис.10.6. Транзакция А выполнила несовместимый анализ

10.5. Блокировка
      Описанные выше проблемы могут быть разрешены с помощью
методики управления параллельным выполнением процессов под
названием блокировка. Ее основная идея проста: в случае, когда для

                                    125


выполнения некоторой транзакции необходимо чтобы некоторый объект
(обычно это кортеж базы данных) не изменялся непредсказуемо и без
ведома этой транзакции, такой объект блокируется.
      Более подробно функционирование блокировки заключается в
следующем:
   1. Прежде всего, предположим, что в системе поддерживается два типа
      блокировок: блокировка без взаимного доступа (монопольная
      блокировка), называемая X-блокировкой, и блокировка с взаимным
      доступом, называемая S-блокировкой.
   2. Если транзакция А блокирует кортеж р без возможности взаимного
      доступа (X-блокировка), то запрос другой транзакции В с
      блокировкой этого кортежа р будет отменен.
   3. Если транзакция А блокирует кортеж р с возможностью взаимного
      доступа (S-блокировка), то
            запрос со стороны некоторой транзакции В на X-блокировку
            кортежа будет отвергнут;
            запрос со стороны некоторой транзакции В на S-блокировку
            кортежа будет принят (т.е. транзакция В также будет
            блокировать кортеж р с помощью S-блокировки).
      Теперь следует ввести протокол доступа к данным, который на
основе X и S-блокировок позволяет избежать возникновения проблем
параллелизма, описанных выше.
   1. Транзакция, предназначенная для извлечения кортежа, прежде всего
      должна наложить S-блокировку на этот кортеж.
   2. Транзакция, предназначенная для обновления кортежа, прежде всего
      должна наложить X-блокировку на этот кортеж. Иначе говоря, если,
      например,      для      последовательности    действий      типа
      извлечение/обновление для кортежа уже задана S-блокировка, то ее
      необходимо заменить X-блокировкой.
   3. Если запрашиваемая блокировка со стороны транзакции В
      отвергается из-за конфликта с некоторой другой блокировкой со
      стороны транзакции А, то транзакция В переходит в состояние
      ожидания. Причем транзакция В будет находится в состоянии
      ожидания до тех пор, пока не будет снята блокировка, заданная
      транзакцией А.
   4. X-блокировки сохраняются вплоть до конца выполнения транзакции
      (до операции «завершение выполнения»). S –блокировки также
      обычно сохраняются вплоть до этого момента.

10.6. Решение проблем параллелизма
      Рассмотрим описанные выше проблемы,          возникающие    при
параллельной обработке кортежей.



                                 126


      Проблема потери результатов обновления
      На рис. 10.7. приведена измененная версия процесса, показанного на
рис.3., с учетом применения протокола блокировки для чередующихся
операций.

             Транзакция А         Время               Транзакция В
     Извлечение кортежа p         t1
     (задание S-блокировки)
                                  t2          Извлечение кортежа p
                                              (задание S-блокировки)
     Обновление кортежа p         t3
     (задание X - блокировки)
     ожидание                     t4          Обновление кортежа p
                                              (задание X-блокировки)
     ожидание                                 ожидание
   Рис.10.7. Хотя обновления не утрачиваются, но в момент времени t4
                     возникает тупиковая ситуация

     Проблема незафиксированной зависимости
     На рис.10.8 и рис.10.9 приведены в измененном виде примеры,
показанные ранее на рис.10.4 и рис.10.5 соответственно. Они
демонстрируют чередующееся выполнение операций согласно описанному
выше протоколу блокировки.
           Транзакция А          Время            Транзакция В
                                 t1    Обновление кортежа p
                                       (задание X-блокировки)
    Извлечение кортежа p         t2
    (задание S-блокировки)
    ожидание                     t3          Окончание или отмена выполнения
                                             (снятие X-блокировки)
    Итог: извлечение кортежа р
    (задание S-блокировки)
    Рис.10.8. Транзакция А предохраняется от выполнения операций с
          незафиксированным изменением в момент времени t2

           Транзакция А          Время            Транзакция В
                                 t1    Обновление кортежа p
                                       (задание X-блокировки)
    Обновление кортежа p         t2
    (задание X-блокировки)
    ожидание                     t3          Окончание или отмена выполнения
                                             (снятие X-блокировки)
    Итог: обновление кортежа р
    (задание X-блокировки)
    Рис.10.9. Транзакция А предохраняется от выполнения операций с
          незафиксированным изменением в момент времени t2


                                       127


     Проблема несовместимого анализа
На рис.10.10 приведена измененная версия рис.10.6 с перечислением
чередующихся транзакций согласно протоколу блокировки.

Счет 1 – 40, Счет2 – 50, Счет3 - 30
             Транзакция А            Время              Транзакция В
Извлечение кортежа Счет 1           t1
(задание S-блокировки для кортежа
Счет 1)
Sum=40
Извлечение кортежа Счет 2           t2

Sum=90
                                   t3        Извлечение кортежа Счет 3
                                             (задание S-блокировки для   кортежа
                                             Счет 3)
                                   t4        Обновление кортежа Счет 3
                                             (задание X-блокировки для   кортежа
                                             Счет 3)
                                             30 20
                                   t5        Извлечение кортежа Счет 1
                                             (задание S-блокировки для   кортежа
                                             Счет 1)
                                   t6        Обновление кортежа Счет 1
                                             (задание X-блокировки для   кортежа
                                             Счет 1)
                                             40 50
Извлечение кортежа Счет 3         t7         ожидание
(задание S-блокировки для кортежа
Счет 3)
ожидание                                     ожидание
    Рис.10. Проблема несовместимого анализа разрешается, но в момент
                 времени t7 возникает тупиковая ситуация

10.7. Тупиковая ситуация
      Как было показано выше, блокировку можно использовать для
разрешения трех основных проблем, возникающих при параллельной
обработке кортежей. К сожалению, использование блокировок приводит к
возникновению другой проблемы – тупиковой ситуации. Два примера
таких ситуаций были приведены выше.
      Тупиковая ситуация возникает тогда, когда две или более транзакции
одновременно находятся в состоянии ожидания, причем для продолжения
работы каждая из транзакция ожидает прекращения выполнения другой
транзакции.
      Желательно, чтобы при возникновении тупиковой ситуации система
могла обнаружить ее и найти из нее выход. Для обнаружения тупиковой


                                     128


ситуации следует обнаружить цикл в диаграмме состояний ожидания, т.е. в
перечне «транзакций, которые ожидают окончания выполнения других
транзакций». Поиск выхода из тупиковой ситуации состоит в выборе
одной из заблокированных транзакций в качестве жертвы и отмене ее
выполнения. Таким образом, с нее снимается блокировка, а выполнение
другой транзакции может быть возобновлено.




                                  129



    
Яндекс цитирования Яндекс.Метрика