Администрируем
Oracle, SQL Server, PostgreSQL

Планирование внедрения секционирования MS SQL Server

Часто в процессе эксплуатации БД некоторые её объекты сильно разрастаются, что негативно влияет на производительность и время обслуживания. Одним из вариантов решения этой проблемы может быть секционирование.
В этой статье мы расскажем о плюсах и минусах секционирования СУБД, а также покажем на конкретном примере, как его использует «ДБ-сервис».

Плюсы и минусы секционирования MS SQL Server

Внедрение секционирования может дать следующие преимущества:
  • Упрощение обслуживания в версиях СУБД, начиная с SQL Server 2016. Заключается в возможности производить обслуживание индексов и статистики на уровне секций, а не целого индекса.
  • Ускорение запросов, использующих фильтрацию по секционированному полю. Состоит в возможности проведения поиска не по всему индексу, а по его «фрагментам».
  • Получение расширенных возможностей по управлению данными. К ним относится вынесение архивных секций в особые файловые группы на медленных дисках или более простая очистка старых секций в версиях СУБД, начиная с SQL Server 2016.
Однако внедрение секционирования сопряжено и с определенными сложностями и рисками:
  • Внедрение секционирования становится затруднительным, когда речь идет о больших объектах: особенно сложно секционировать кластерные индексы.
  • Секционирование требует изменения структуры некоторых объектов. Например, добавить новые поля в индексы, что может повлечь за собой конфликт с приложением.
  • Если версия SQL Server старше 2016, то обслуживание секционированных индексов в онлайн невозможно (его можно осуществлять лишь вручную, что займет очень много времени).
Если сопоставить эти плюсы и минусы, становится понятно, что внедрение секционирования MS SQL Server — вещь полезная, однако доверить его лучше профессионалам. Обратившись к инженерам «ДБ-сервис» вы получите не только поддержание СУБД SQL Server в работоспособном состоянии, но и помощь по изменению инфраструктуры в соответствии с требованиями вашего бизнеса.

Подготовка к внедрению секционирования

Прежде, чем внедрять секционирование, рекомендуется оценить:
  1. Размер таблицы и индексов (чем больше объекты, тем сложнее работы);
  2. Количество индексов (все ли планируется секционировать, в каком порядке, есть ли кластерный индекс);
  3. Поля индексов и активность их использования (состав полей будет определять наиболее удачное поле для секционирования, а активность использования покажет перспективную выгоду).

Как работает с секционированием «ДБ-сервис»

Рассмотрим теперь, как оценивает возможность и необходимость секционирования «ДБ-сервис» на примере таблицы в БД Axapta (Microsoft Dynamics AX), одного из крупнейших в России продуктовых ритейлеров.
  1. Оцениваем размер. Таблица и индексы имеют небольшой размер (все весит менее 50 ГБ).
2. Выбираем поля для секционирования. В таблице есть два основных индекса по которым ведется поиск; остальные используются редко.
3. Ищем подходящий столбец для секционирования. В данном случае это затруднительно т. к. структуры двух основных индексов, выбранных выше, сильно различаются.
4. Анализируем данные и делаем выводы:
RECID (уникальный идентификатор записи) фигурирует только в кластерном индексе. Если его добавить в остальные индексы, это может увеличить их размер и не дать прироста скорости (требует детализированного исследования).
Тем не менее, RECID монотонно возрастает, что делает построение функции секционирования по нему достаточно простым. OPERDATE (время) есть в нескольких индексах. Его добавление в остальные не должно значительно увеличить размер, но может увеличить производительность (требует детализированного исследования).
Сам столбец — дата, которая варьируется в пределах 2015-08-05 00:00:00.000 - 2023-05-25 00:00:00.000, и на данный момент столбец содержит 347188668 уникальных значений.
Можно пробовать произвести секционирование таблицы по OPERDATE с разбивками по пол года или по 3 месяца.
5. Высылаем результаты анализа клиенту для принятия решения. Именно клиент будет проводить детализированные исследования принимать итоговое решение о внедрении секционирования.

Выводы

Мы рассказали о преимуществах секционирования MS SQL Server, а также трудностях, с которыми оно может быть сопряжено. На примере на примере таблицы в БД Axapta был разобран пример того, как «ДБ-сервис» производит анализ, по результатам которого дает рекомендации по секционированию своим клиентам.

Эксперт ДБ-сервис