Показаны сообщения с ярлыком internals. Показать все сообщения
Показаны сообщения с ярлыком internals. Показать все сообщения

SQL Server. Storage Engine. Страницы данных

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

Структура таблицы

Рассмотрим структуру таблицы в SQL Server.
Каждая таблица или индекс хранит свою информацию в партициях (partition, до 15.000 для sql server 2012). Каждая партиция может содержать один объект  B-дерева (b-tree, если быть точным в виде B+ дерева) или кучу(heap), отсюда, данные структуры называют общим именем hobt (heap or b-tree). Между партицией и hobt-структурой существует отношение один к одному. В зависимости от типа данных колонок таблицы или индекса, hobt может состоять из трех наборов страниц (allocation unit), каждая из которых образует цепочку страниц (iam chain):
  • IN_ROW_DATA (практически все типы данных, кроме описанных ниже)
  • ROW_OVERFLOW_DATA (типы переменной длины, вместе с которыми запись не помещается на страницу)
  • LOB_DATA ( nvarchar(max), filestream, xml, varbinary)