Реализация сжатия страниц

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

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

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

Сжатие конечного уровня таблиц и индексов вместе со сжатием страницы состоит из трех операций в следующем порядке:

  1. сжатие строк;
  2. сжатие префикса;
  3. сжатие словаря.

При сжатии страницы неконечные страницы индексов сжимаются с использованием только сжатия строк. Дополнительные сведения о сжатие строк см. в статье о реализации сжатия строк.

сжатие префикса;

Для каждой сжимаемой страницы сжатие префикса состоит из следующих шагов.

  1. Для каждого столбца определяется значение, которое может использоваться для уменьшения места хранения значений в каждом столбце.

  2. Строка, представляющая префиксные значения для каждого столбца, создается и хранится в структуре сжатой информации (CI), следующей за заголовком страницы.

  3. Повторяющиеся префиксные значения в данном столбце заменяются ссылкой на соответствующий префикс. Если значение в строке точно не соответствует выбранному значению префикса, можно указать частичное совпадение.

Следующая иллюстрация показывает образец страницы таблицы перед сжатием префикса.

Diagram of page before prefix compression.

Следующая иллюстрация содержит эту же страницу после сжатия префикса. Префикс перемещается к заголовку, а значения столбца изменяются ссылками на данный префикс.

Diagram of page after prefix compression.

В первом столбце первой строки значение 4b указывает, что первые четыре символа префикса (aaab) присутствуют для этой строки, а также символ b. Это делает результативное значение aaabb, которое является исходным значением.

сжатие словаря.

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

Diagram of page after dictionary compression.

На это значение 4b ссылается разные столбцы страницы.

При сжатии страниц

При создании новой таблицы, имеющей сжатие страницы, сжатия не происходит. Однако табличные метаданные указывают на то, что сжатие страницы должно быть использовано. Так как данные добавляются на первую страницу данных, они имеют сжатие строк. Так как страница не заполнена, из сжатия страниц не извлекается никакого преимущества. После того как страница заполнена, добавление следующей строки вызывает операцию ее сжатия. Вся страница просматривается; каждый столбец оценивается для сжатия префикса, а затем оцениваются все столбцы для сжатия словаря. Если сжатие страницы создало достаточно места на странице для дополнительной строки, добавляется строка, а данные сжимаются и страницы. Если пространство, полученное сжатием страницы, минус пробел, необходимый для структуры CI, не является значительным, сжатие страницы не используется для этой страницы. Будущие строки либо помещаются на новую страницу, либо, если они не соответствуют, новая страница добавляется в таблицу. Как и первая страница, новая страница не сжимается на первой странице.

Если существующая таблица, содержащая данные, преобразуется для сжатия страниц, каждая страница перестраивается и оценивается. Перестроение всех страниц приводит к перестроению таблицы, индекса или секции.

Далее