24.9.25

Анатомия экстента

Автор: Paul Randal, Inside the Storage Engine: Anatomy of an extent

В предыдущей публикации я рассказал о страницах базы данных — их структуре и некоторых разновидностях страниц. Теперь я хотел бы объяснить, как страницы объединяются в т.н. экстенты. Экстент представляет собой группу из восьми физически последовательных страниц в файле данных. Экстенты всегда выравниваются по границам 64 КБ (то есть по границам 8 страниц), начиная с начала файла. Экстенты и все их свойства остаются неизменными во всех версиях, но способы их использования различаются. Существует два типа экстентов: смешанные экстенты и однородные (uniform) экстенты.

Смешанные экстенты (версии до SQL Server 2016)

Первые 8 страниц, которые выделяются (распределяются) любой цепочке IAM, представляют собой постраничные распределения, которые называются смешанными страницами. Это означает, что цепочке IAM за раз выделяется только одна страница, а не целый экстент. Обоснование этого подхода заключается в том, чтобы позволить очень маленьким таблицам занимать минимальное количество места. После того как цепочка IAM преодолевает порог в 8 страниц, происходит переключение на распределение однородных экстентов, и никогда больше не возвращается к выделению смешанных страниц.

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

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

Вы можете использовать флаг трассировки 1118 для отключения этого поведения, что особенно важно делать при наличии конфликта распределения битовых карт tempdb.

Во всех этих версиях страницы IAM также являются смешанными страницами.

Смешанные экстенты (SQL Server 2016 и далее)

Использование смешанных экстентов отключено по умолчанию, и единственными страницами, которые являются смешанными страницами, являются страницы IAM, и это нельзя отключить.

Однородные экстенты

В SQL Server 2016 и далее все распределения цепочке IAM производятся из выделенных экстентов (за исключением страниц IAM самой цепочки IAM).

В версиях до SQL Server 2016, если не включен флаг трассировки 118, первые 8 страниц, выделяемых цепочке IAM, являются смешанными страницами, и после преодоления порога в 8 страниц все дальнейшие выделения цепочке IAM производятся из выделенных экстентов (за исключением страниц IAM самой цепочки IAM).

Распределённый экстент будет считаться таковым, если он выделялся цепочке IAM и это отмечается в одной из страниц IAM в цепочке IAM — в той, которая отображает интервал GAM, в котором находится экстент. Экстент также отслеживается как выделенный соответствующей страницей GAM, поэтому никакая другая цепочка IAM не может его выделить.

Все страницы из распределённого экстента должны быть выделены одной и той же цепочке IAM. Однако они не обязательно должны быть одного типа. Например, кластерный индекс содержит смесь страниц данных и индексов. Кроме того, когда экстент выделяется цепочке IAM, страницы в экстенте не выделяются все сразу (за исключением некоторых массовых операций), а выделяются обычно по мере необходимости. Состояние распределения каждой страницы отслеживается с помощью страницы PFS.

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

Отслеживание изменений экстентов для резервного копирования

Изменения экстентов отслеживаются в двух местах:

  • Любой экстент, который был изменен с момента последнего полного резервного копирования, будет отслеживаться на соответствующей странице разностной битовой карты. Именно так разностное резервное копирование (differential backup) узнает, какие экстенты следует копировать вместо всей базы данных. Все страницы разностной карты сбрасываются при выполнении следующего полного резервного копирования.
  • Любой экстент, который был изменен операцией с минимальным журналированием (bulk-logged) с момента последнего резервного копирования журнала, будет отслеживаться на соответствующей странице битовой карты минимального журналирования. Любое резервное копирование журнала, которое выполняется после операции с минимальным журналированием, также будет включать все экстенты, отслеживаемые таким образом. Все страницы  ML-карт сбрасываются при выполнении следующего резервного копирования журнала.

Подробнее о страницах PFS, GAM, SGAM, ML и DIFF можно узнать в следующих статьях.



Комментариев нет:

Отправить комментарий