Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / LCD / Хранение БД.doc
Скачиваний:
50
Добавлен:
16.04.2013
Размер:
173.06 Кб
Скачать

Блоки данных

Блок данных (data block) - это единица доступа к дисковой памяти для базы данныхOracle. Посредством блоков данных осуществляется сохранение и считывание информации. Например, когда для некоторой таблицы формируется запрос,Oracleсчитывает в память сервера все блоки данных, которые содержат строки результирующего множества этого запроса.

При создании базы данных следует указать для неё размер блока, который должен быть равен или кратен размеру блока, используемому операционной системой сервера. Например, если размер блока операци­онной системы сервера ранен 512К, то размер блока базы данных, уста­новленной на этом сервере, может быть равен 512К, 1024К, 2048Kи т.д.

Выделение блоков данных

При создании нового объекта хранения данных, например таблицы, индекса или сегмента отката. Oracleвыделяет для сегмента этого объекта один или несколько экстентов. Экстент - это группа последовательных блоков данных, в файле данных табличной области, в котором хранится сегмент объекта. Если все блоки данных в существующих экстентах сегмента заполняются и одна из транзакций запрашивает пространство для хранения новых данных.Oracleвыделяет сегменту новый экстент.

Доступность блоков данных и списки свободных блоков

Для каждого сегмента данных и индексного сегмента базы данных Oracleсуществует один или несколько списков свободных блоков данных. Список свободных блоков (free list) - это каталог блоков данных, которые доступны для хранения новой информации соответствующего объекта: таблицы, кластера или индекса. На рис. $.8 показано, как блоки данных включаются в список свободных блоков и исключаются из него, по мере того как транзакции вводят, удаляют или обновляют информацию таблицы.

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

В разделе “Пороги блоков” показано, как управлять процессом включения блоков данных в списки свободных блоков сегментов.

Сцепление строк и размер блока данных

Когда в таблицу вводится новая строка, Oracleпомещает эту строку в блок данных из списка свободных блоков таблицы. В оптимальном вариантеOracleразмещает всю информацию новой строки в одном блоке данных. Таким образом, при запросе какой-либо строки таблицыOracleвыбирает необходимую информацию, считывая только один блок данных с диска в оперативную память.

Если строка больше, чем блок данных, то Oracleформирует сцеплен­ную (chained) строку, связывая её с двумя или более блоками данных. Сцепление строк проиллюстрировано на рис. $.9.

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

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

Кроме того, Oracleможет создать сцепленную строку, когда пользова­тель обновляет строку таблицы или индекса. Это происходит, когда:

  • Пользователь обновляет строку таким образом, что она становится больше исходной.

  • В блоке данных, хранящем строку, нет свободного пространства, достаточного для выполнения обновления.

Когда ожидается, что при обновлении строк их размер будет увеличиваться, зарезервируйте для операций обновления дополнительное пространство блоков данных, это поможет предотвратить сцепление строк. В разделе “Пороги блоков” показано, как управлять пространством блоков данных.