Управление ресурсами БД OpenEdge

Продолжение перевода Adam Backman «OpenEdge Revealed:Mastering the OpenEdge Database with OpenEdge Management».
Перевод публикуется в виде статей и постоянно редактируется.

Управление ресурсами БД OpenEdge

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

Эта глава рассказывает о внутреннем устройстве БД OpenEdge и о различных путях оптимизации OpenEdge для наиболее полного использования ресурсов системы. Глава состоит из следующих разделов:

  • Внутренняя структура БД OpenEdge
  • Управление блоками данных
  • Оптимизация размещения данных
  • Оптимизация областей БД
  • Репликация БД OpenEdge
  • Оптимизация использования памяти
  • Оптимизация использования CPU

Внутреннее устройство БД OpenEdge

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

Блоки базы данных

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

Блоки базы данных можно  поделить на три группы:

  • Блоки данных
  • Индексные блоки
  • Другие типы блоков

Блоки данных

Блоков данных — наиболее распространенные блоки в БД. Существуют два типа таких блоков: RM-блоки (RM — Record Manager) и блоки RM-цепочек. Единственное отличие между этими блоками состоит в том, что RM-блоки — полностью заполнены, а блоки RM-цепочек являются частично заполенными блоками. Внутренняя же структура таких блоков полностью идентична. Оба типа блоков являются социальными. Социальные блоки содержат в себе записи из разных таблиц. Иными словами говоря, RM-блоки позволяют сохранить внутри себя информацию (записи) множества таблиц. В отличии от них, индексные блоки содержат только индексы, которые относятся к одной таблице.

Количество записей, которое может быть размещено в одном блоке настраивается для каждой области хранения. Для дополнительной информации об этом перейдите в раздел «Оптимизация размещения на диске».

Каждый RM-блок содержит четыре типа данных:

  • Заголовок блока
  • Записи
  • Поля
  • Свободное пространство

Заголовок блока содержит адрес блока (dbkey), тип блока, тип цепочки, счетчик бэкапов, ссылку на следующий блок, счетчик обновлений (необходим при изменении схемы данных), указатели на свободное пространство и указатели на запись. Заголовок блока имеет длину в 16 байт. Каждая запись содержит указатель на фрагменты (его используют отдельные поля при указании на запись), поле для размещения размера записи и поле Skip Table (используется для увеличения скорости поиска полей). Каждое поле нуждается минимум в 15-и байтах дополнительно к размеру данных для хранения различной служебной информации и информации о размере.

Индексные блоки

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

Индексы используются для быстрого поиска записей. Все индексы СУБД OpenEdge структурированы в виде бинарных деревьев (B-tree) и хранятся в сжатом виде. Это увеличивает производительность путем уменьшения сравнений ключей.

При рассмотрении индексов необходимо выделить ряд важных моментов:

  • База данных может иметь до 32767 индексов
  • Одному индексу соответствует одно B-дерево
  • Каждое B-дерево начинается с корневого элемента
  • Корневой элемент размещается в записи таблицы _storageobject

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

Другие типы блоков

Существуют и другие тип блоков. Ниже представлен список блоков, которые могут быть для вас полезными:

  • Мастер-блок
  • Блок Storage Object
  • Свободный блок
  • Пустой блок

Мастер-блок

Мастер-блок содержит тот же самый 16-и байтовый заголовок, что и другие блоки, но он используется для хранения информации о статусе всей базы данных. Это всегда первый блок базы данных и он находится в области номер 6. Мастер-блок содержит так называемые tainted-флаги для БД OpenEdge. Tainted-флаги сообщают среде OpenEdge о том, что у базы данных существуют проблемы. Используя виртуальные системные таблицы (VST) можно посмотреть информацию, хранящуюся в таблице _mstrblk. Сделать это можно из OpenEdge Procedure Editor:

Кроме того, данные VST-тадлиц для любой базы данных можно посмотреть с помощью OE Management.

  1. Выберите из меню пункт Resources
  2. Выберите базу данных, содержимое VST которой необходимо просмотреть
  3. Выберите Raw VST Data в фрейме деталей. Появится выпадающий список доступных VST-таблиц для выбранной БД.
  4. Выберите таблицу и формат представления данных

На иллюстрации показан пример отображения VST-таблицы _MstrBlk

Блок Storage Object

Блоки типа Storage Object содержат адреса первой и последней записи каждой таблицы по каждому индексу. Если пользователь запускает программу, которая ищет первую или последнюю запись (делает запросы типа FIND FIRST… или FIND LAST…), то нет никакой необходимости сканировать индекс. Команда FIND получает необходимую информацию из блока Storage Object и сразу находит необходимую запись. Блоки Storage Object очень часто используются базой данных и поэтому они всё время закреплены в разделяемой памяти. Это положительно влияет на эффективность запросов.

Свободные блоки

У свободных блоков есть заголовок, но в них не хранится никаких данных. В дальнейшем, эти блоки могут стать любыми другими блоками базы данных. Эти блоки находятся ниже high-water mark. High-Water Mark (HWM) — указатель на последний отформатированный блок внутри области хранилища БД.  Свободные блоки могут быть созданы при увеличении HWM базы данных, расширении базы данных или при переформатировании блоков во время перестроения индексов. Если пользователь удаляет много записей, то RM-блоки помещаются в RM-цепочки. Однако, индексные блоки могут быть использованы ещё раз только при перестройке индекса или при его сжатии.

Пустые блоки

Пустые блоки не содержат заголовка. Перед использованием таких блоков их необходимо отформатировать. Эти блоки находятся выше значения HWM, но ниже общего количества блоков области. Общее количество блоков — это количество выделенных блоков для области хранения.

Чтобы посмотреть использование областей хранения в OE Management, необходимо:

  1. Выбрать Resources из меню OpenEdge Management Console
  2. Из фрейма со списком выбрать необходимую базу данных
  3. Выбрать Storage Areas в секции Operation Views фрейма деталей

Иллюстрация 9 показывает базу данных у которой закончилось свободное место. Процент использования и HWM имеют значения около 99 — 100 процентов, что означает, что база данных должна будет расширяться. Если база данных не имеет  экстентов переменной длины, то при попытке расширения эта база данных будет аварийно остановлена.

Leave a Reply

You must be logged in to post a comment.