Поделиться через


Основные понятия секционированных таблиц и индексов

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

ПримечаниеПримечание

Секционированные таблицы и индексы доступны только в выпусках SQL Server Enterprise Edition, Developer Edition и Evaluation Edition.

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

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

Решение, стоит ли применять секционирование, в основном зависит от того, насколько велика таблица или насколько она может увеличиться, как она используется и насколько эффективно отвечает на пользовательские запросы и операции обслуживания.

В целом, большую таблицу стоит секционировать, если выполняются следующие два условия.

  • Таблица содержит (или может в будущем накопить) множество данных, используемых различными способами.

  • Запросы или обновления таблицы выполняются не так, как ожидалось, либо затраты на обслуживание превышают прогнозируемые периоды технического обслуживания.

Например, если текущий месяц используется, в основном, для операций INSERT, UPDATE, DELETE и MERGE, в то время как предыдущие месяцы используются, в основном, для запросов SELECT, работа с этой таблицей может быть упрощена, если таблица секционирована на месяцы. Это особенно удобно, если операции регулярного обслуживания таблицы нацелены только на некоторый поднабор данных. Если таблица не секционирована, выполнение таких операций требует большого количества ресурсов и задействует весь набор данных. Когда применяется секционирование, такие операции обслуживания, как перестроение индекса и дефрагментация, можно выполнять, например только для одного месяца и данных, доступных только для записи, сохраняя оперативный доступ к данным, доступным только для чтения.

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

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

Пример реализации решения секционирования в реальной базе данных можно найти в сценарии секционирования в образце базы данных AdventureWorks. Этот сценарий объясняется в разделе Секционирование в образце базы данных AdventureWorks.

Архитектура секционирования

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