Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnik.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.62 Mб
Скачать

Управление буферами базы данных

Организация управления буферами базы данных играет важную роль в процессе восстановления, поэтому перед переходом к дальнейшему изложению кратко рассмотрим применяемые при этом методы. Как упоминалось в начале данной темы, ответственность за эффективное управление буферами базы данных, которые применяются для чтения и записи страницы во вторичную память, возложена на такой программный компонент, как диспетчер буферов. Эти методы должны предусматривать чтение страниц с диска в буфера до полного их заполнения, а затем применения той или иной стратегии замещения для определения того, какой буфер (буфера) необходимо принудительно записать на диск, чтобы освободить место для новых страниц, которые должны быть считаны с диска. В качестве примеров стратегии замещения можно указать алгоритмы с организацией последовательной очереди (First-In-First-Out – FIFO) и с вытеснением по давности использования (Least Recently Used – LRU). Кроме того, диспетчер буферов не должен считывать страницу с диска, если она уже находится в одном из буферов базы данных.

Один из возможных подходов предусматривает применение двух переменных (pinCount и dirty) в составе информации управления для каждого буфера базы данных. Этим переменным, соответствующим каждому буферу базы данных, первоначально присваивается значение 0. При получении запроса на чтение страницы с диска диспетчер буферов выполняет проверку для определения того, не находится ли уже эта страница в одном из буферов базы данных. В случае отрицательного ответа диспетчер буферов выполняет следующие действия.

1. Использует принятую стратегию замещения для выбора буфера, предназначенного для замещения (который в дальнейшем называется замещаемым буфером), и увеличивает значение его переменной pinCount (pin count – количество случаев закрепления). Теперь затребованная страница закреплена в буфере базы данных до тех пор, пока остается таковой, и не может быть снова записана на диск. Применяемый алгоритм замещения не разрешает выбрать для замещения буфер, который был закреплен.

2. Если переменной dirty для буфера замещения присвоено ненулевое значение, выполняется запись буфера на диск.

3. Страница считывается с диска в буфер замещения, и переменной dirty этого буфера снова присваивается значение нуль.

При поступлении повторного запроса к одной и той же странице соответствующее значение pinCount увеличивается на 1. После того как система сообщит диспетчеру буферов, что применение этой страницы закончено, соответствующее значение pinCount уменьшается на 1. Вместе с тем, система может сообщить диспетчеру буферов, что в содержимое страницы внесено изменение, поэтому переменной dirty присваивается ненулевое значение, т.е. страница отмечается как "грязная" (требующая записи на диск). После того как значение pinCount достигает нуля, страница становится незакрепленной и может быть записана на диск, если в нее внесены изменения (т.е. переменная dirty имеет ненулевое значение).

Ниже описаны правила, которые могут применяться с учетом необходимости восстановления базы данных при записи страниц на диск.

  • Правило конфискации позволяет диспетчеру буферов записывать буфер на диск прежде, чем транзакция выполнит фиксацию (буфер не закреплен).Иными словами, диспетчер буферов может "отнять" страницу, принадлежащую транзакции. Противоположное ему правило запрещает конфискацию страниц.

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

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

С другой стороны, правило, допускающее конфискацию страниц, имеет определенное преимущество перед противоположным ему правилом в том, что позволяет избежать необходимости распределять огромный объем буферного пространства, которое может потребоваться для хранения всех копий страниц, обновляемых многочисленными параллельными транзакциями (к тому же при определенных обстоятельствах такая попытка выделить буфера для всех обновляемых страниц может оказаться практически неосуществимой). Кроме того, преимущество над противоположным ему правилом имеет и правило, не требующее принудительной записи, поскольку при его использовании страница с данными, зафиксированными в предыдущей транзакции, может оставаться в

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]