Опубликован: 02.08.2007 | Уровень: специалист | Доступ: платный
Лекция 13:

Создание физической модели базы данных. Подготовка скрипта для создания базы данных

Оценка размера базы данных

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

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

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

Поскольку ОС распределяет память под файлы в страницах, то при вычислении размера базы данных необходимо оценить число страниц, которое она занимает. Для ОС типа Windows размер страницы составляет 1024 байта.

Формулы для оценки размера БД

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

DB_ Size=\sum_\forall RegularTables + \sum_\forall HashedTables + \sum_\forall Indexes + \sum_\forall Views + Overhead

Перед тем как вычислить размер таблицы, необходимо вычислить размеры всех ее колонок.

Вычисление размера колонки. Вычисление размера колонки зависит от типа домена колонки. Размер колонки или столбца таблицы - это число символов, которое отводится СУБД для хранения колонки заданного типа.

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

Типичные размеры колонок заданного типа приведены в таблице 13.2 ниже.

Таблица 13.2. Типичные размеры колонок в зависимости от типа данных
Тип данных Размер колонки
Character Число символов в строке
Number [(NumberOfDigits + 2)/ + 1 байт
Date 5 байт
DateTime 12 байт
Long varchar 12 байт плюс число сраниц для хранения данных

Размер строки таблицы определяется как сумма размеров всех ее колонок по формуле

Data \_  Length = \sum  всех \_  длин \_  колонок

Вычисление размера таблицы. Основываясь на значении Data_Length можно оценить размер обычной таблицы или хэш-таблицы. Формулы для выполнения такой оценки приведены в таблицах 13.3 и 13.4. Различие в методике расчета размера хэш-таблицы заключается в необходимости учитывать параметр загрузки хэш-таблицы (packing_density), который устанавливается при определении такой таблицы.

Таблица 13.3.
Параметр Формула
Row_Lenght Длина строки на физической странице включает в себя длину заголовка и размер строки таблицы, которая вычисляется по формуле Row_Lenght = 18 + (2 * число_колонок) + Data_Lenght
Row_Lenght_with_Stack Длина строки с размером стека Row_Lenght_with_Stack = Row_Lenght * 100 / (100 - PCTFREE)
Usable_Row_Page_Size Используемая СУБД длина строки на странице. В SQLBASE длина заголовка страницы равна 86 байт Usable_Row_Page_Size = 1024 - 86 = 936 байт
Rows_per_Page Число строк на странице: Rows_per_Page = [Usable_Row_Page_Size / Row_Lenght_with_Stack]
Nbr_Row_Pages Число страниц: Nbr_Row_Pages = [NbrOfRows / Rows_per_Page], где NbrOfRows - предполагаемое число строк в таблице
Nbr_Long_Pages Число страниц, занимаемых длинными строками: Nbr_Long_Pfge = NbrOfRows * Nbr_Long_Pages_per_Long_Col, Nbr_Long_Pages_per_Long_Col - число длинных строк на страницу
Total_Data_Page Число страниц данных: Total_Data_Page = Nbr_Row_pages + Nbr_Long_Pages
Таблица 13.4. Оценки размера хэш-таблицы
Параметр Формула
Row_Lenght Длина строки на физической странице включает в себя длину заголовка и размер строки таблицы, которая вычисляется по формуле Row_Lenght = 18 + 6 + (2 * число_колонок) + Data_Lenght Дополнительные 6 байт необходимы для поддержки хэш-ключа
Row_Lenght_with_Stack Длина строки с размером стека: Row_Lenght_with_Stack = Row_Lenght * 100 / (100 - PCTFREE)
Usable_Row_Page_Size Используемая СУБД длина строки на странице. В SQLBASE длина заголовка страницы равна 86 байт Usable_Row_Page_Size = 1024 - 86 = 936 байт
Rows_per_Page Число строки на страницу: Rows_per_Page = [Usable_Row_Page_Size / Row_Lenght_with_Stack]
Nbr_Row_Pages Число строк на странице: Nbr_Row_Pages = [NbrOfRows / Rows_per_Page],где NbrOfRows - предполагаемое число строк в таблице
Nbr_Long_Pages Число страниц, занимаемых длинными строками: Nbr_Long_Pfge = NbrOfRows * Nbr_Long_Pages_per_Long_Col, Nbr_Long_Pages_per_Long_Col - число длинных строк на страницу
Nbr_Hashed_Table_Pages Число страниц хэш-таблицы: Nbr_Hashed_Table_Pages = Nbr_Row_Pages / packing_density
Total_Data_Page Число страниц данных: Total_Data_Page = Nbr_Row_pages + Nbr_Long_Pages

Вычисление размера индекса. Для каждого созданного B-Tree индекса его размер оценивается следующим образом: вычисляется размер индексного ключа, оценивается число строк в таблице, затем оценивается число страниц, которое занимает индекс. Расчет выполняется по формулам, приведенным в таблице 13.5.

Таблица 13.5. Оценка размера индекса
Параметр Формула
Key_Lenght Длина ключа равна сумме средних длин колонок, которые составляют данный ключ
Index_Entry_Lenght Длина размера строки индекса: Index_Entry_Lenght = 9 + число_колонок_ключа_индекса + Key_Lenght
Usable_Index_Page_Size Используемый СУБД размер страницы индекса: Usable_Index_Page_Size = (1024 - 74)* (100 - PCTFREE)/100
Index_Entry_per_Page Число входов индекса на страницу: Index_Entry_per_Page = [Usable_Index_Page_Size / Index_Entry_Lenght
Nbr_Index_Pages Число страниц, занимаемых индексом Nbr_Index_Pages = [NbrOfRows / Index_Entry_per_Page], где NbrOfRows - предполагаемое число строк в таблице

Вычисление размера заголовка представления. Для каждого представления существует фиксированная часть заголовка и переменная часть заголовка, которая зависит от его сложности. Формулы для расчета размера заголовка представления приведены в таблице 13.6.

Таблица 13.6. Оценка размера заголовка представления
Параметр Формула
Fixed_Overhead = 12 * 1024
Variable_Overhead = 150 * число_таблиц + 170 * число_колонок
Variable_Overhead_all_Views \sum Variable_Overhead для всех представлений
Total_View_overhead_in_Page = [(Fixed_Overhead + Variable_Overhead + Variable_Overhead_all_Views)/1024]

Оценка размера фиксированной системной области. Размер системной области в страницах (Total_Fixed_Overhead_Pages) для базы данных СУБД SQLBASE оценивается по следующей формуле:

Total_Fixed_Overhead_Pages = 
12*число_таблиц + 2*число_хэш_индексов + 602112/1024
Александра Каева
Александра Каева
Михаил Забелкин
Михаил Забелкин
Евгений Вершинин
Евгений Вершинин
Россия, Нижний Новгород, Нижегородский государственный технический университет, 2008
Aleksandr Arshinskyi
Aleksandr Arshinskyi
Россия