Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiNovye.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.92 Mб
Скачать

Физическая архитектура баз данных

Физическая архитектура включает в себя:

  • описание файлов данных и журнала транзакций;

  • их первоначальный размер, шаг прироста, максимальный размер, параметры конфигурации и т. д.

При использовании базы данных пользователь работает прежде всего с логическими компонентами, такими как таблицы, представления, процедуры и т. п. Рассмотрим, как физически устроены и как хранятся логические компоненты баз данных. Каждая копия SQL Server имеет четыре системных базы данных (master, msdb, tempdb и model) и две или более пользовательских базы данных. Набор системных баз постоянен и не может изменяться. Более того, также не разрешено изменение имён этих баз данных. По-хорошему, пользователь вообще не должен напрямую обращаться к системным базам данных, а использовать для работы с ними только специально разработанные для этого интерфейсы. К таким интерфейсам относятся системные хранимые процедуры, утилита SQL Server Management Studio и программные интерфейсы SQL (API).

При соединении с SQL Server организуется связь с конкретной базой данных на сервере. Эта база данных называется текущей базой данных. Обычно пользователь соединяется с базой данных, определённой системным администратором, хотя при необходимости можно использовать интерфейс API, для связи с другой базой данных. Пользователю предоставляется возможность переключаться между подсоединёнными к серверу базами данных с помощью соответствующих команд или указанного интерфейса.

SQL Server позволяет отсоединять базы данных от одной копии SQL Server, а затем подсоединять их к другой копии или подсоединять их обратно к той же копии. База данных хранится в отдельных файлах. Кроме того, база данных и журнал транзакций хранятся отдельно, что повышает надёжность системы. Если произойдет сбой, и файлы базы данных будут повреждены, то можно восстановить базу данных из резервной копии, а затем восстановить сделанные изменения из журнала транзакций, который останется неповреждённым. Каждая база данных имеет, минимум, два файла: один для журнала транзакций и один для базы данных. Эти файлы имеют различную структуру, и при работе с ними применяются разные правила.

Страницы и группы страниц

Основная единица хранения данных на уровне файла базы данных – это страница (page). В виртуальной системе хранения SQL Server страница представляет собой блок фиксированной длины, обрабатываемый при дисковых операциях ввода-вывода как единое целое. Если пользователь обращается к одной строке данных, с диска будет считана вся страница, даже если в ней помимо требуемой строки записано ещё 20 других строк, поскольку место в базе данных выделяется страницами. В SQL Server размер страницы равен 8 Кбайт, соответственно в одном мегабайте содержится 128 страниц. Файлы журнала транзакций не имеют страниц и экстентов. Они содержат только последовательность записей транзакций, выполняемых в базе данных.

Каждая страница имеет объем 8192 байт. Первые 96 байт страницы отводятся под заголовок, в котором хранится системная информация о типе страницы, объёме свободного места на странице и идентификационном номере объекта (таблицы или индекса), являющегося владельцем страницы (ID object owner).

Имеется шесть типов страниц:

  • Data используются для хранения всех данных, кроме данных типа text, ntext и image;

  • Index используются для хранения информации об индексировании таблиц;

  • Text/Image используются для хранения данных типа text, ntext и image;

  • Global Allocation Map (GAM) – хранят информацию об использовании экстентов (групп страниц);

  • Page Free Space – хранят информацию о свободном пространстве на страницах;

  • Index Allocation Map (IAM) – хранят информацию об экстентах, используемых таблицами или индексами.

Страницы типа Data содержат информацию о данных, исключая данные типа text, ntext и image. Для каждой строки данных таблицы на странице выделяется фиксированное пространство, куда заносятся данные из полей строки. Строки располагаются на странице последовательно сразу же после заголовка. В конце каждой страницы имеется таблица смещений строк (row offset table), в которой указывается смещение начала каждой строки относительно начала страницы. Смещения строк располагаются в порядке, обратном порядку размещения строк на странице (Рис.3.1).

рис 3.1. Структура страницы данных

Страница является минимальным блоком, который сервер выделяет для хранения данных. Для более эффективного управления страницами SQL Server использует группы страниц, или экстенты (extent). Экстент является базовым блоком хранения данных таблиц и индексов, то есть экстент существует только для страниц типа Data, Index и Text/Image. Каждый экстент содержит 8 страниц и занимает 64 Кбайт. Каждая страница, имеет своего владельца (таблицу, индекс и т. д.). В зависимости от того, принадлежат ли все страницы одному владельцу, используется один из двух типов экстентов:

  • Mixed – экстенты этого типа могут содержать страницы, принадлежащие разным владельцам (таблицам, индексам), что позволяет сократить расход свободного пространства; например, если в таблице содержится всего несколько строк и они занимают не более половины страницы, было бы нецелесообразно выделять для хранения строк этой таблицы целый экстент, так как 74% выделенного пространства было бы не использовано; первоначально для таблицы или индекса выделяется экстент типа Mixed;

  • Uniform – когда для хранения данных одного владельца выделено 8 страниц в различных экстентах типа Mixed, они автоматически объединяются в экстент типа Uniform; в результате данные в таблице становятся более упорядоченными, что позволяет оптимизировать операции дискового ввода-вывода, ускоряет операции поиска и массивного обновления; экстент типа Uniform всегда содержит страницы одного владельца (Рис. 3.2).

рис 3.2. Структура экстентов

С помощью страниц типа Global Allocation Map (GAM) MS SQL Server хранит информацию о свободных экстентах. При этом используется два типа битовых страниц:

  • Global Allocation Map (GAM) – страницы этого типа хранят информацию о том, используется ли конкретный экстент для хранения данных или он пуст; каждый бит в GAM соответствует одному экстенту; если бит установлен в 1, то экстент свободен и может быть выделен для хранения данных; одна страница GAM хранит информацию об использовании 64 000 экстентов, что соответствует примерно 4 Гбайт данных;

  • Shared Global Allocation Map (SGAM) – подобно GAM, одна страница типа SGAM может описать 64 000 экстентов; каждый бит страницы соответствует одному экстенту; если бит для конкретного экстента установлен в 1, то этот экстент имеет тип Mixed и, как минимум, одна страница в этом экстенте свободна и может быть использована; если бит установлен в 0, то либо экстент имеет тип Uniform, либо все страницы экстента типа Mixed заняты.

Битовые поля GAM и SGAM позволяют быстро найти свободную страницу в экстенте типа Mixed и упрощают управление информацией об использовании экстентов. Кроме того, применение двух самостоятельных полей позволило уменьшить объём управляющей информации и повысить производительность. Поля GAM и SGAM используются совместно, дополняя друг друга. Для каждого участка длиной в 4 Гбайт выделяется по одному полю GAM и SGAM. Если экстент был заполнен полностью, но после удаления строк одна страница освободилась, то достаточно установить в единицу соответствующий бит в поле SGAM. Если же экстент освобождается полностью, то в поле GAM устанавливается в единицу бит, соответствующий нужному экстенту. Для выделения экстента типа Mixed сервер ищет в поле GAM бит, установленный в 1, и устанавливает его в 0, затем в поле SGAM устанавливает соответствующий бит в 1 (если не все страницы экстента заняты полностью) или в 0 (все страницы экстента заняты). Для выделения экстента типа Uniform сервер ищет в поле GAM бит, установленный в 1, и устанавливает его в 0. В поле SGAM соответствующий бит устанавливается в 0.

На основании вышесказанного можно сделать вывод, что битовые поля GAM и SGAM используются только для быстрого выделения страниц. Хранимая в них информация не даёт ответа, какому объекту принадлежит экстент.

Битовые поля GAM и SGAM содержат информацию только о том, используется ли конкретная страница. Для хранения информации о количестве свободного пространства на страницах типа Data, Index и Text/Image используются страницы типа Page Free Space (PFS). Каждая такая страница содержит информацию о свободном пространстве для 8000 страниц. Каждый байт страницы PFS соответствует отдельной странице и может описывать следующие состояния:

  • страница не используется (0 % занято);

  • страница заполнена на 1 – 50 %;

  • страница заполнена на 51 – 80 %;

  • страница заполнена на 81 – 95 %;

  • страница заполнена на 96 – 100 %.

Страницы PFS используются для быстрого поиска страниц, имеющих необходимое количество свободного пространства. Предположим, что необходимо записать 17 строк данных. Имеется последовательный набор страниц, имеющих свободное пространство для хранения соответственно 7, 4, 9, 23 и 3 строк данных. Если записывать строки последовательно, начиная с первой свободной страницы, то чтобы сохранить 17 строк, понадобится три страницы (7+4+9). В худшем случае нужно выполнить три операции дискового ввода-вывода (если страницы не кэшированы). Если же записывать данные сразу в четвёртую страницу, имеющую место для хранения 23 строк, то понадобится всего одна операция дискового ввода-вывода. Если для поиска страницы, имеющей достаточно свободного пространства, последовательно считывать с диска все страницы, это может занять много времени. При использовании страниц PFS поиск свободных страниц становится очень эффективным, так как сервер перебирает только страницы PFS.

Страницы PFS облегчают поиск свободных страниц, но они не имеют информации о том, какому владельцу принадлежит та или иная страница. Для отслеживания информации о страницах, принадлежащих одному объекту-владельцу, используются страницы типа Index Allocation Map (IAM). Для каждого владельца создаётся минимум одна страница IAM. Каждая страница IAM имеет заголовок, в котором хранится информация об идентификационном номере объекта-владельца страниц, а также смещение первого экстента, с которого начинается область IAM. Страницы IAM создаются при необходимости и могут располагаться в произвольном месте файла. Структура IAM представлена битовым полем, каждый из битов которого описывает единственный экстент. Если бит установлен в 1, то соответствующий экстент содержит страницы, принадлежащие описанному в IAM владельцу. Если же бит установлен в 0, то данный экстент не имеет страниц, принадлежащих нужному владельцу.

Каждая страница IAM покрывает диапазон размером 64 000 экстентов, начиная с указанного в заголовке первого экстента. Если объект-владелец имеет принадлежащие ему экстенты за пределами области, охватываемой одной страницей IAM, то создаются дополнительные страницы IAM, которые связываются в список. Каждая страница IAM в списке, кроме последней страницы, имеет ссылку на следующую в списке страницу IAM. Если владельцу принадлежат экстенты в разных файлах базы данных, то в каждом таком файле создаётся, минимум, одна страница IAM. Страницы в разных файлах также связываются в цепочку (Рис.3.3).

рис 3.3. Организация цепочек страниц

При необходимости вставить несколько строк в таблицу SQL Server просматривает страницы IAM для поиска экстентов, содержащих принадлежащие этой таблице страницы. Когда экстент найден, просматриваются соответствующие страницы PFS для поиска свободных страниц. Если ни одна из страниц не имеет достаточного места для вставки требуемого количества строк, то для объекта (в данном случае - для таблицы) выделяется новый экстент. Причём если база данных имеет несколько файлов, экстенты выделяются в каждом файле в равных пропорциях. Например, если база данных содержит два файла и второй файл в три раза больше первого, то при выделении одного экстента в первом файле во втором файле будет выделено три экстента. Это сделано для того, чтобы файлы базы данных заполнялись равномерно.

Как видно из всего вышесказанного, MS SQL Server имеет очень эффективную структуру хранения данных, обеспечивающую высокую скорость операций создания, поиска и удаления строк данных.

Каждый файл данных базы данных имеет приблизительно одинаковую физическую структуру. Все страницы в файле нумеруются последовательно, начиная с 0 для самой первой страницы. Каждый файл базы данных имеет уникальный идентификационный номер (ID). Комбинация номера страницы и идентификационного номера файла позволяет однозначно идентифицировать страницу в базе данных. В начале файла располагается страница заголовка файла (стр. 0), в которой хранятся атрибуты файла. Сразу же за ней располагается страница PFS (стр. 1), в которой хранится информация об использовании страниц в экстенте. Затем располагаются страницы битовых полей GAM (стр. 2) и SGAM (стр. 3). Страницы ТАМ создаются в любом месте файла. На каждые 8000 страниц данных создается новая страница PFS. Страницы GAM и SGAM создаются на каждые 64 000 экстентов, или на каждые 512 000 страниц.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]