В новой версии
сервера баз данных фирма Microsoft реализовала абсолютно новый механизм хранения.
SQL Server
7.0 организует следующую иерархию хранения:
В отличие
от версии 6.5 объекты БД не обязательно занимают целый блок. На начальном этапе
заполнения объект может занимать внутри блока несколько страниц. Поэтому существуют
два типа блоков:
Когда объект
создается, то обычно его первые страницы отводятся в смешанном блоке, по мере
роста объекта он уже размещается в однородных блоках.
В SQL 7.0
существуют уже 7 типов страниц:
Все страницы
имеют заголовок размером 96 байтов. В заголовке хранится общая информация, используемая
ядром СУБД для работы со страницами. На странице в отличие от блока хранится
однородная информация. Поэтому среди параметров страницы задаются:
После заголовка
следует информация о статусе страницы в картах распределения блоков и карте
свободного пространства.
Новыми в
архитектуре дисковой памяти являются страницы размещения. В этих страницах хранятся
сведения о размещении данных. SQL Server 7.0 использует три типа страниц размещения:
карты распределения блоков, карты свободного пространства, индексные карты размещения.
SQL Server 7.0 хранит информацию размещения на разных уровнях: на уровне блоков,
на уровне страниц, на уровне объектов. Такой разносторонний мониторинг помогает
СУБД оптимизировать работу в соответствии с требованиями конкретного запроса.
Карты
распределения блоков
В данных
картах хранится информация о распределении блоков. Карта распределения блоков
состоит из стандартного заголовка и одного битового массива в 64 000 битов.
Каждый бит характеризует один блок. Поэтому одна страница карты распределения
описывает пространство в 64 000 блоков или 4 Гбайт данных.
Карты распределения
блоков делятся на два типа:
При отведении
пространства сервер использует обе карты распределения.
Карты
свободного пространства
Степень заполнения
страниц в SQL 7.0 отслеживает специальный механизм — карты свободного пространства
(Page free space page, PFS). Каждая PFS-страни-ца хранит информацию о 8000 страниц,
по 1 байту на страницу. Каждый байт представляет собой битовую карту, которая
сообщает о степени занятости страницы и о том, принадлежит ли она объекту.
Первые страницы
файла БД всегда используются под карты распределения. Страница № 1 состоит из
двух частей. После стандартного заголовка страницы следует заголовок файла,
содержащий его описание, затем размешается блок PFS. Страницы PFS повторяются
через каждые 8000 страниц, если размер файла
превосходит
один блок. Страница № 2 — это GAM, страница № 3 — это SGAM. Карты распределения
блоков повторяются через каждые 512 000 страниц. Кроме того, каждая девятая
страница первичного файла — это загрузочная страница БД (database boot page),
содержащая описание БД и параметры конфигурации.
Карты
размещения
Для организации
связи между блоками и расположенными на них объектами используются индексные
карты размещения (Index Allocation Map, IАМ). Каждая таблица или индекс имеют
одну или более страниц IАМ. В каждом файле, в котором размещаются таблица или
индекс, существует минимум одна карта размещения для этой таблицы или индекса.
Страницы IАМ размещаются про,-извольно внутри файла и отводятся по мере необходимости.
IAM объединены друг с другом в цепочку двунаправленными ссылками. Указатель
на первую карту размещения содержится в поле FirstIAM системной таблицы Sysindex.
Каждая IAM
описывает некоторый диапазон блоков и представляет собой битовую карту: если
бит установлен в 1, то в данном блоке есть страницы, принадлежащие данному объекту,
если в 0 — то нет.
Все страницы
размещения не связаны напрямую с некоторым объектом БД, они соответствуют некоторой
системной информации, поэтому параметр «идентификатор объекта» для
всех этих страниц одинаков и равен 99.
Страницы
данных
На самом
общем уровне здесь, так же как и в предыдущей версии, страница данных делится
на 3 зоны: заголовок, область данных и таблицу смещений, но размер страницы
увеличен, размер заголовка также и некоторые отличия существуют и в структуре
остальных зон.
Прежде всего
стоит отметить, что в отличие от SQL Server 6.5 в новой версии страницы данных
не связаны друг с другом в цепочки. За связь между страницами и объектами отвечает
новая специальная структура — карты размещения.
Кроме того,
ранее данные на странице хранились непрерывно. При удалении строки данные внутри
страницы перемещались так, чтобы не оставалось пустот. Однако такой подход затруднял
строчные блокировки. И в новой версии данные на странице не обязательно хранятся
непрерывно. Здесь допустимы пропуски. При удалении строки пустое пространство
помечается и потом его может занять новая строка, но перемещения строк не происходит.
В SQL Server
7.0 теперь поддерживается классический термин слот (Slot), и это место размещения
строки на странице. Если таблица не имеет кластеризованного индекса, то номер
слота является идентификатором строки и не меняется, пока не будет удалена соответствующая
строка. Если же таблица имеет кластеризованный индекс, то слоты располагаются
в порядке, задаваемом индексом.
Строки
данных
Строки данных
претерпели существенное изменение. Отметим наиболее важные моменты.
Текстовые
страницы
В версии
7.0 изменены принципы хранения текстовых полей. Строки данных по-прежнему содержат
16-байтные указатели на текстовые данные. Однако хранение самих текстовых данных
производится иначе.
Текстовая
страница теперь может содержать несколько текстовых полей. Собственно данные
хранятся в виде сбалансированного дерева (B-tree). Строка данных содержит указатель
на корневую структуру (Root structure) размером 84 байта.
Данные длиной
менее 64 байт хранятся в корневой структуре. Для данных до 32 Кбайт корневая
структура (Root structure) может адресовать 4 блока данных (это не блоки страниц)
до 8 Кбайт каждый. Блоки наращиваются до 8 Кбайт (реально на одной текстовой
странице может быть размещено 8080 байт). Например, если первая порция данных
составляет 4 Кбайта, то отводится один блок. Если в дальнейшем данные увеличиваются
до 6 Кбайт, то первый блок увеличивается до 6 Кбайт, а второй блок имеет размер
всего 2 Кбайта.
Если же длина
текстового поля более 32 Кбайт, то строятся промежуточные узлы.
В версии
7.0 текстовая страница может содержать данные нескольких текстовых полей (рис.
9.18).
Страницы
журнала транзакций
В отличие
от версии 6.5 в новой версии под журнал транзакций отводится всегда отдельный
файл. В предыдущей версии журнал транзакций являлся системной таблицей и хранился
в системном сегменте LOG. Несмотря на настоятельные рекомендации располагать
журнал транзакций и файлы базы данных на разных физических устройствах, СУБД
автоматически не контролировала этот факт. В новой версии журнал транзакций
всегда хранится в отдельном файле.
Рис. 9.18. Пример хранения текстовых данных на одной странице
Когда тот или иной физик использует понятие "физический вакуум", он либо не понимает абсурдности этого термина, либо лукавит, являясь скрытым или явным приверженцем релятивистской идеологии.
Понять абсурдность этого понятия легче всего обратившись к истокам его возникновения. Рождено оно было Полем Дираком в 1930-х, когда стало ясно, что отрицание эфира в чистом виде, как это делал великий математик, но посредственный физик Анри Пуанкаре, уже нельзя. Слишком много фактов противоречит этому.
Для защиты релятивизма Поль Дирак ввел афизическое и алогичное понятие отрицательной энергии, а затем и существование "моря" двух компенсирующих друг друга энергий в вакууме - положительной и отрицательной, а также "моря" компенсирующих друг друга частиц - виртуальных (то есть кажущихся) электронов и позитронов в вакууме.
Однако такая постановка является внутренне противоречивой (виртуальные частицы ненаблюдаемы и их по произволу можно считать в одном случае отсутствующими, а в другом - присутствующими) и противоречащей релятивизму (то есть отрицанию эфира, так как при наличии таких частиц в вакууме релятивизм уже просто невозможен). Подробнее читайте в FAQ по эфирной физике.