Pull to refresh

Организация хранения данных в MS SQL Server 2008

Всем хорошо известно, что в MS SQL Server база организована в двух видах фалов: файле данных (mdf-файле) и фале логов (ldf-файле). В файлах первого типа SQL Server хранит соб-ственно сами данные, а в файлах второго типа записывает информацию об операции над данны-ми перед тем как провести эту самую операцию, это нужно для того чтобы в случае надобности восстановить данные.
Самое интересное это то, как SQL Server организовывает данные внутри mdf-файла? Результатом моего поиска ответа на этот вопрос стала эта статья, которая является переводом из книги Michael Lee, Gentry Bieker «Mastering SQL Server 2008»
Итак, движок SQL Server разбивает файл данных на структуры, которые называются страни-цы (pages), по умолчанию страницы имеют размер 8KB. В свою очередь станицы организовываются в структуру, которая назевается экстент (extent), который по умолчанию имеет размер 64KB. Каждая страница выделяется под конкретные нужды, т.е. в одной странице не могут храниться собственно данные и, например, служебная информация индексов. В SQL Server существует несколько видов страниц:
1. Data Pages. Эти страницы содержат данные всех типов данных (кроме text, nvarchar(MAX), xml и т.п.). Это основной тип страниц.
Index Pages. В страницах этих типов храниться информация об индексах, как кластерных так и не кластерных. Информация об индексе содержит значения ключа индекса и дополнительные данные для обнаружения данных и управления процессом индексирования
2. Large Object Pages. Большие значения данных SQL Server хранит в альтернативном мес-те, если размер значения превышает размер страницы. Для данных таких типов данных как text, nvarchar(MAX) и т.п. Data Page записывается небольшой указатель на Large Object Pages, где хранятся сами данные. Данные типов text и varchar (MAX) всегда хранятся в Large Object Pages. Данные таких типов как varchar и varbinary будут перемещены в Large Object Pages из Data Page динамически, если размер данных превысит размер страницы. Если в будущем столбец будет отредактирован и размер данных уменьшится и станет меньше размера страницы, то он будет перенесен туда Large Object Pages.
3. Другие страницы. В SQL Server существуют также другие типы страниц, в которых хра-нятся конфигурационные данные. Такие страницы включают: Global Application Map, In-dex Application Map, Bulk Changes Map и другие.
Страницы организованы в экстенты. Каждый экстент представляет собой ровно 8 смежных страниц. Экстент это базовая единица хранения в SQL Server, когда происходит выделение дискового пространства для какого-нибудь объекта (например, таблицы) для нее будет выделен целый экстент. Это позволяет быть уверенным, что информация об одном объекте будет физически расположена в одном месте на жестком диске. Те экстенты в которых расположен один объект называются uniform extent.
В случае, если объекты небольшие и не требуют выделения отдельного эктента под каждый объект, SQL Server разместить несколько объектов в одном экстенте. Такие экстенты называются mixed extent.
Для того чтобы в любой момент времени получить любые данные SQL Server должен управлять размещением экстентов. Это производится с помощью двух карт размещения: Global Allocation Map (GAM) и Shared Global Allocation Map (SGAM). Каждая из этих карт может хранить данные о размещении более чем 64000 экстентов, т.е. более чем 4 GB данных. GAM использует двоичный код для отслеживания пустых и непустых экстентов. SGAM отслеживает mixed extent используя двоичный код для идентификации того есть ли свободное место в экстенте.
Существуют также специфические страницы, которые называются Page Free Space (PFS). Они используются для отслеживания пустого места в каждой отдельной станице.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.