Основы проектирования реляционных баз данных

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


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

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

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

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

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

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

Тип данныхРазмер колонки
CharacterЧисло символов в строке
Number[(NumberOfDigits + 2)/ + 1 байт
Date5 байт
DateTime12 байт
Long varchar12 байт плюс число сраниц для хранения данных

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

Data _ Length =

всех _ длин _ колонок

Вычисление размера таблицы. Основываясь на значении 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
<
table class="xml_table" cellpadding="2" cellspacing="1">

Таблица 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_densityTotal_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
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


Содержание раздела