Количество записей в блоке
Количество записей в блоке (далее RPB, Records Per Block) – это допустимое количество записей в каждом блоке области хранения.
В области хранения схемы (Schema Area) значение RPB фиксировано и зависит от размера блока базы данных:
- 32 для размера блока 1 Кб, 2 Кб и 4Кб;
- 64 для размера блока 8 Кб.
Для областей с данными (номера областей с 7 по 32 000) значение RPB доступно на выбор: 1, 2, 4, 8, 16, 32, 64, 128 и 256. Для областей хранения After-Image и Before Image параметр RPB не применяется.
Как правило, области предназначенные для хранения данных содержат записи разных размеров. Для оптимизации производительности администратор должен рассчитать оптимальное количество записей в блоке для каждой области хранения базы данных. В первую очередь необходимо получить информацию о состоянии данных в работающей базе данных. После чего произвести расчёт RPB.
Для расчёта значения RPB в области хранения необходимо:
- Определить средний размер записи в области хранения.
- Рассчитать доступное пространство в блоке базы данных.
- Рассчитать оптимальное значения RPB в блоке.
- Определить наилучшее значение RPB для области.
Первым делом для расчёта RPB необходимо определить средний размер записи в каждой области хранения.
Каждая область с данными может содержать одну или несколько таблиц, поэтому для определения среднего размера записи используйте следующие рекомендации:
- если в области хранения только одна таблица, то используется её средний размер записи;
- если в области хранения находится множество больших и маленьких таблиц, то средний размер записи выбирается для:
- наиболее важной таблицы относительно перспектив развития бизнеса;
- наиболее большой таблицы в терминах количества записей, общего размера или среднего размера записей в ней;
- наиболее часто используемой таблицы.
Для того, чтобы определить средний размер записи в таблице, необходимо иметь работающую некоторое время базу данных. Так как со временем записи в таблице создаются, обновляются и удаляются, то их средний размер постепенно стабилизируется. Но даже если база данных создаётся с нуля, то выполнить первоначальную оценку можно путём создания таблицы в тестовой базе данных c загрузкой в неё тестовых данных.
Определить средний размер записи в таблице можно с помощью утилиты PROUTIL TABANALYS или инструментария OpenEdge Management.
Для определения среднего размера записи с помощью PROUTIL TABANALYS необходимо:
- Сгенерировать отчёт с анализом таблиц следующей командой:
proutil <db-name> -C tabanalys -csoutput -verbose -fieldsep “;” > db-name.txt
Эта команда сформирует отчёт с анализом состояния таблиц в базе данных и сохранит его в файле db-name.txt. Кроме того, для удобства автоматизации анализа таблиц, в каталоге базы данных дополнительно будут созданы три файла db–name.tab.txt, db–name.lob.txt и db–name.block.txt. Такие файлы могут быть загружены, например, в MS Excel для представления в более наглядном виде. Дополнительную информацию об этих файлах смотрите в документации по СУБД OpenEdge.
- Открыть файл db–name.txt в любом текстовом редакторе и изучить секции Record Block Summary для каждой области хранения. Особое внимание необходимо обратить на столбец Mean Record Size (Mean). Далее определить среди таблиц наиболее представительную и записать её средний размер записи.
Пример секции Record Block Summary для области хранения Cust_Data, которая содержит только одну таблицу Customer:
RECORD BLOCK SUMMARY FOR AREA "Cust_Data": 9 ------------------------------------------------------- RECORD BLOCK SUMMARY FOR SHARED TABLES -------------------------------------------- -Record Size (B)- ---Fragments--- Scatter Table Records Size Min Max Mean Count Factor Factor PUB.Customer 421707 31.4M 72 225 78 421707 1.0 1.0 --------------------------------------------------------- Subtotals: 421707 31.4M 72 225 78 421707 1.0 1.0 --------------------------------------------------------- Summary for AREA "Cust_Data": 9 Subtotals: 421707 31.4M 72 225 78 421707 1.0 1.0
В этом примере средний размер записи в таблице Customer равен 78, запомним это значение.
Следующим шагом необходимо выполнить расчёт доступного пространства в блоке базы данных по следующей формуле:
AvailSpacePerBlock = DBblockSize - HeaderSize - CreateLmit
Назначение элементов формулы:
- DBblockSize – значение размера блока базы данных (1 Кб, 2 Кб, 4 Кб и 8Кб):
- для Windows и Linux рекомендуется использовать 4Кб;
- для UNIX – 8Кб.
- HeaderSize – пространство в блоке базы данных для хранения заголовка (служебная информация). Размер заголовка блока равен 80 байт.
- CreateLimit – минимальное свободное пространство в байтах в блоке после вставки новой записи. Значение Create Limit должно быть больше 32 байт и меньше размера блока минус 128 байт:
- для баз данных с размером блока 1 Кб значение Create Limit по умолчанию равно 75 байт;
- для прочих размеров блока – значение по умолчанию равно 150 байт.
Следующая таблица содержит доступное пространство для каждого размера блока базы данных:
Размер блока |
Заголовок | Create Limit |
Доступное |
1 Кб (1 024 байт) | 80 байт | 75 байт | 869 байт |
2 Кб (2 048 байт) | 80 байт | 150 байт | 1 818 байт |
4 Кб (4 096 байт) | 80 байт | 150 байт | 3 866 байт |
8 Кб (8 192 байт) | 80 байт | 150 байт | 7 962 байт |
Пример расчёта доступного пространства в блоке для операционной системы Windows:
4 096 байт – 80 байт – 150 байт = 3 866 байт.
Теперь, когда известно доступное пространство в блоке и средний размер записи в таблице, можно рассчитать оптимальное количество записей в блоке по следующей формуле:
OptimalRPB = AvailSpacePerBlock / MeanRecordSize
Например, средний размер записи в таблице Customer (единственная в области хранения Cust_Data) равен 78 байт, а доступное пространство в блоке равно 3 866 байт. Оптимальное значение RPB в этом случае следующее:
3 866 байт / 78 байт = 49,56
Теперь мы знаем оптимальное количество записей в блоке базы данных, но в структурном файле (.st) необходимо указать только допустимое значение RPB. Допустимыми значениями RPB являются: 1, 2, 4, 8, 16, 32, 64, 128 и 256. Наилучшее значение количества записей в блоке рекомендуется выбирать ближайшее допустимое значение большее чем расчётное оптимальное количество записей в блоке. Эта рекомендация связана с тем, что СУБД OpenEdge будет извлекать больше записей из блока с каждой дисковой операцией ввода-вывода, что приводит к более высокой производительности.
В примере мы рассчитали оптимальное количество записей в блоке для области хранения Cust_Data равное 49,56. В качестве наилучшего значения для RPB выбираем значение 64, так как это ближайшее допустимое значение в большую сторону.
Примечание: если область хранения полностью предназначена для индекса или категории индексов, то в качестве лучшей практики значение RPB для такой области рекомендуется выбрать равным 1.