По причинам
объективно существующей разницы в скорости работы процессоров, оперативной памяти
и устройств внешней памяти (эта разница в скорости существовала, существует
и будет существовать всегда) буферизация страниц базы данных в оперативной памяти
— единственный реальный способ достижения удовлетворительной эффективности СУБД.
Операционные
системы создают специальные системные буферы, которые служат для кэширования
пользовательских процессов. Однако стратегия буферизации, применяемая в операционных
средах, не соответствует целям и задачам СУБД, поэтому для оптимизации обработки
данных одной из главных задач СУБД является создание эффективной системы управления
процессом буферизации.
Разделяемая
память, управляемая СУБД, состоит из нескольких типов буферов:
Информация
в буферах взаимосвязана, и требуется эффективная система поддержки единой работы
всех частей разделяемой памяти.
Если бы запись
об изменении базы данных реально немедленно записывалась во внешнюю память,
это привело бы к существенному замедлению работы системы.
Поэтому записи
в журнал тоже буферизуются: при нормальной работе очередная страница выталкивается
во внешнюю память журнала только при полном заполнении записями.
Но реальная
ситуация является более сложной. Имеются два вида буферов — буфер журнала и
буфер страниц оперативной памяти, которые содержат связанную информацию. И те
и другие буферы могут выталкиваться во внешнюю память. Проблема состоит в выработке
некоторой общей политики выталкивания, которая обеспечивала бы возможности восстановления
состояния базы данных после сбоев.
Буфера не
выделяются для каждого пользовательского процесса, они выделяются для всех процессов
сервера БД. Это позволяет увеличить степень параллелизма при исполнении клиентских
процессов.
Разделяемая
память наиболее эффективно используется вспомогательными процессами сервера,
иногда называемыми демонами, которые используются для синхронизации взаимодействующих
процессов на сервере.
На этом мы
закончили рассмотрение физических моделей, применяемых в базах данных. Физические
модели большей частью скрыты от пользователей. Однако в SQL существует команда
создания индексных файлов. При этом по умолчанию стандартно создаются индексные
файлы для первичных ключей, для вторичных ключей индексные файлы создаются дополнительной
командой CREATE INDEX, которая имеет следующий формат:
CREATE [UNIQUE] INDEX <имя_индекса> ON <имя_таблицы>
( <имя_столбца>[<признак
упорядочения>] |
[,<имя_столбца>[<признак упорядочения>]...])
<имя_индекса > - уникальный идентификатор в системе.
<Признак упорядочениям:={ASC
| DESC}
Здесь ASC
— признак упорядочения по возрастанию, DESC — признак упорядочения по убыванию
значений соответствующего столбца в индексе. Индекс может быть удален командой
DROP, которая имеет следующий формат:
DROP INDEX <имя
индекса>