Хранение логических данных

Оценить
(0 голоса)

Основной единицей хранения в ASE является page (страница). Размер страницы до выхода ASE 12.5 был фиксированным и составлял 2 Кбайт для большинства платформ, включая и Solaris. ASE 12.5 лучше строит главное устройство с помощью dataserver, чем с двоичным buildmaster, и расширяет количество поддерживаемых размеров страниц включением размеров 4, 8 и 16 Кбайт.

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

Группы из восьми страниц называются extents (экстентами). Размещение и удаление пространства для таблиц и индексов выполняется постранично, исключая загрузки данных, при которых происходит размещение большого числа страниц - по экстенту за один раз, что составляет 16 Кбайт для страниц размером 2 Кбайт.

Вслед за этим уровнем в иерархии хранения данных следует allocation unit (единица (блок) выделения памяти). Единичный блок состоит из 32 экстентов, или 256 страниц (512 Кбайт). При инициализации дискового устройства ASE (disk init) распределение пространства происходит в блоках. Первая страница блока является страницей распределения для оставшихся страниц в единичном блоке. Страница распределения содержит структуру для каждого из 32 экстентов внутри этого блока. Каждая структура экстента включает карту распределения и идентификатор объекта, которому экстент выделен.

Каждая таблица и индекс обладают одной или более страницами ОАМ (Object Allocation Map - карты распределения объекта), которые указывают страницы распределения с экстентами, принадлежащими таблице или индексу. Страницы ОАМ также содержат итоговую информацию об использованных и неиспользованных страницах и о количестве строк в таблице. Страницы ОАМ дают возможность ASE быстро размещать страницы, доступные таблице или индексу для использования.

Дисковое пространство в Sybase разделяется на segments (сегменты), которые распределяются по одному или более дисковым файлам или разделам. При создании БД автоматически создаются три сегмента: сегмент default (принятый по умолчанию) для таблиц и индексов, сегмент system (системный) для системных таблиц, а также logsegment для сохранения syslog (системного журнала). Вовсе не обязательно использовать сегменты, хотя некоторые пользователи поступают именно так. Определенные пользователем сегменты держат под контролем размещение и размер объектов БД, а через контроль над размещением осуществляется и контроль над производительностью операций ввода/вывода.

Взаимоошение между сегментами и устройствами выглядит как "множество-множество"; сегмент может быть распространен по нескольким устройствам Sybase, а одно устройство может содержать несколько сегментов.

Следующий пример иллюстрирует соответствия между сегментами, устройствами и объектами в предположении, что devl, dev2, dev3 и dev4 были предварительно инициализированы. Предположим, что мы создаем БД следующим образом:

use master go

create database salesdb

on devl = 250, dev2 = 250, dev3 = 250 log on dev4 = 100

go

Сегменты default и system будут отображаться в devl, dev2 и dev3, a logsegment (журнал) - в dev4. Предположим, что далее мы создаем таблицу заказчика с помощью следующих команд:

use ealesdb go

create table cuetomer cuet_id integer, cust_name char(40), cust_address char(60)

go

Мы не управляем размещением таблицы; она может быть размещена на devl, dev2 или dev3.

Предположим, что теперь мы создаем сегмент следующей командой: sp_addeegment Myseg, saleedb, dev3

Новый сегмент размещается на устройстве dev3, которое может быть томом, созданным менеджером томов, низкоуровневым разделом или файлом UFS. Мы можем разместить таблицу sales history на этом устройстве следующей (сокращенной) командой:

create table sales_history (.) on Newseg

Поскольку мы управляли выбором устройства, используемого для Newseg, то могли бы выбрать и место размещения таблицы sales_history. Позже мы могли бы расширить сегмент Newseg на devl - на одно из устройств, изначально используемое для содержания БД salesdb. Для этого может быть применена следующая команда: sp_extendsegment Newseg, salesdb, devl

Теперь сегменту Newseg соответствуют области на устройствах dev3 и devl. Так что устройство devl содержит три сегмента: default, system и часть сегмента Newseg.

Подобно тому, как сегменты могут быть распространены среди нескольких устройств, и объекты БД могут быть распространены среди ряда сегментов. Например, мы решили произвести вставку новых строк таблицы customer в сегмент Newseg с помощью spjplaceobject, как показано ниже:

sp_placeobject Newseg, customer

Существующие строки таблицы customer будут помещены в сегмент default; следующие строки будут помещаться в сегмент Newseg.

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

Таблицы и индексы
Разбивка таблиц на разделы
Системные базы данных
Параллельная обработка
Adaptive Server IQ with Multiplex

Добавить комментарий


Защитный код
Обновить