Изменения

Перейти к: навигация, поиск

Подсистема хранения данных

4416 байт добавлено, 13:23, 27 декабря 2021
update
В некоторых СУБД администраторы баз данных имеют возможность выбирать из вариантов структур данных для содержания пользовательских данных по соображениям производительности. Иногда структуры данных имеют выбираемые параметры для настройки производительности базы данных.
 
 
== Страничная организация памяти ==
Все современные СУБД умеют использовать.
 
=== Память разбита на равные страницы ===
* Прямое отображение в память
* Загрузка и выгрузка всей страницы
* Для IA32 и AMD64 обычно 4КБ (для маленьких страниц), 2МБ или 4МБ (для больших страниц)
 
=== Обработка быстрее чем чтение ===
Обработка в оперативной памяти обычно быстрее, чем чтение. Позволяет заниматься промежуточным сжатием данных и т.д. (чтобы уменьшить объём хранимый на диске)
 
=== Последовательности страниц ===
* Хранят данные одного типа. Обычно данный одной таблицы или индекса, для которых типичны к следующей/предыдущей странице.
* Частые переходы к следующей/предыдущей странице
* Желательно хранить последовательно
== Модули системы хранения ==
[[Файл:dbms-data-access.png|450px|thumb|right|Схема доступа к данным]]
 
=== Диспетчер диска ===
* Каталог страниц
=== Диспетчер записей ===
* Доступ к записям
 
В решении задачи поиска конкретного фрагмента данных в базе данных и передачи его пользователю участвует несколько различных уровней программного обеспечения. Безусловно, подробности устройства этих уровней в значительной степени зависят от конкретной системы (к тому же в разных системах часто применяется различная терминология), но используемые при этом принципы являются довольно стандартными, и эти принципы кратко описаны ниже:
 
#Вначале СУБД определяет, какая ей требуется запись, и передает диспетчеру записей запрос на выборку этой записи. (В целях этого простого описания предполагается, что СУБД обладает способностью заблаговременно и точно определять, какая именно запись ей потребуется. На практике чаще всего возникает необходимость сделать выборку набора из нескольких записей и выполнить поиск среди этих записи в оперативной памяти, чтобы найти ту конкретную запись, которая действительно требуется. Но, в принципе, это означает лишь то, что последовательность шагов 1—3 иногда приходится повторять для каждой записи из этого набора);
#Диспетчер страниц свою очередь определяет, какая страница содержит требуемую запись, и передает диспетчеру диска запрос на выборку этой страницы;
#Наконец, диспетчер диска определяет физическое местонахождение желаемой страницы на диске и выдает необходимый запрос на выполнение операции ввода-вывода на диске.
 
'''''Примечание.''''' Безусловно, что иногда требуемая страница может уже находиться в буфере оперативной памяти в результате ранее выполненной операции выборки, и в этом случае, безусловно, необходимость повторно осуществлять ее выборку не возникает.
= Организация данных =
=== Какие проблемы? ===
Записи длиннее страницы. Не все СУБД это позволяют (записи длиннее страницы не поддерживаются (исключение - колонки BLOB, CLOB, которые могут храниться отдельно))
 
== Страничная организация памяти ==
{{Определение
|definition='''Страничная память''' — способ организации виртуальной памяти, при котором виртуальные адреса отображаются на физические постранично.
}}
 
Все современные СУБД умеют использовать.
 
=== Память разбита на равные страницы ===
* Прямое отображение в память
* Загрузка и выгрузка всей страницы
* Для IA32 и AMD64 обычно 4КБ (для маленьких страниц), 2МБ или 4МБ (для больших страниц)
 
=== Обработка быстрее чем чтение ===
Обработка в оперативной памяти обычно быстрее, чем чтение. Позволяет заниматься промежуточным сжатием данных и т.д. (чтобы уменьшить объём хранимый на диске)
 
=== Последовательности страниц ===
* Хранят данные одного типа. Обычно данный одной таблицы или индекса, для которых типичны к следующей/предыдущей странице.
* Частые переходы к следующей/предыдущей странице
* Желательно хранить последовательно
 
=== Преимущества страничной памяти ===
* Легко выделять физическую память — списки свободных ячеек;
* Естественный подход — все ячейки одного размера;
 
=== Недостатки страничной памяти ===
* Внутренняя фрагментация;
** Процессам может быть нужны размеры, некратные размеру страницы;
** По сравнению с размером адресного пространства, размер страницы очень мал;
* Накладные расходы при обращении к памяти;
** вначале к таблице страниц, а затем уже к памяти:
*** '''''Решение:''''' аппаратный КЭШ для обращений к таблице страниц ('''''TLB''''' translation lookaside buffer – буфер внутри процессора);
* Большой объем памяти, требуемый для хранения таблиц страниц.
== Список страниц ==
Анонимный участник

Навигация