Как разбить базу на файлы и не сойти с ума
Разбиение базы данных 1C на файлы и последующее сопровождение. Нюансы, грабли и прочее.
- Описание
- Подробнее
Описание
Суть вопроса
В прошлых статьях мы уже говорили о подходах к разработке и обслуживанию базы данных, которые позволяют использовать индексы произвольной структуры и даже секционирование для баз 1С. Казалось бы, тема исчерпана и для высоконагруженных баз может наступить светлое будущее, не смотря на то, что платформа 1С пока так и не поддерживает эти возможности из "коробки".
Однако, хотелось бы остановиться подробнее на такой теме как разбиение базы данных на отдельные файлы с помощью файловых групп. В статье про секционирование файловые группы уже использовались для секций, но там про них был сказано вскользь.
Сегодня мы более детально рассмотрим их использование, а также нюансы, с которыми нужно считаться при обслуживании базы данных, реструктуризациях и других моментах.
Для чего вообще может понадобиться разбивать базу данных на отдельные файлы? Самые распространенные кейсы:
- Есть регистр сведений, в котором хранятся двоичные данные файлов. Необходимо вынести хранение файлов на отдельный диск / хранилище, чтобы освободить место на быстрых дисках.
- Есть старые архивные таблицы, которые уже редко используются, но удалять данные нельзя. Почему бы такие таблицы также не перенести на отдельные диски, которые для этого и предназначены. Тем более такие файловые группы можно сделать только для чтения.
- Ускорить бэкапирование базы, т.к. архивные файловые группы можно не бэкапировать каждый раз. Они ведь не меняются!
- Улучшение производительности, за счет распределения файлов базы данных на отдельные носители.
Тему ускорения бэкапирования и производительности сейчас мы рассматривать не будем, но Вы можете прочитать об этом в публикации про секционирование. Сосредоточимся на описании настроек для файловых групп и их сопровождении. Все примеры ниже будут сделаны для SQL Server, но и для PostgreSQL это будет работать с некоторыми модификациями.
Стандартный подход
Любая база, будь то для 1С или любого другого приложения, поддерживает разбиение базы на несколько файлов (конечно, если это поддерживает СУБД). В контексте SQL Server это реализуется с помощью файловых групп.
По умолчанию база содержит лишь одну файловую группу "PRIMARY", которую 1С и использует для своих целей. Кроме таблиц и индексов в этой предопределенной группе хранится служебная информация о базе, различные заголовки и др., поэтому полностью заменить эту группу на другую нельзя, она всегда будет присутствовать.
Однако, мы можем добавить собственные файловые группы и использовать их для 1С’ных таблиц, причем сама платформа об этом не узнает.
Возьмем для примеров демобазу БСП и создадим в ней две новых файловых группы.
-- В примере имя базы данных на сервере СУБД имеет название "bsl"
USE [master]
GO
ALTER DATABASE [bsl] ADD FILEGROUP [FILEGROUP_2]
GO
ALTER DATABASE [bsl] ADD FILEGROUP [FILEGROUP_3]
GOНо просто добавить файловые группы недостаточно. Еще нужно добавить файлы данных, для которых эти файловые группы будут задействованы.
-- Оставляем стандартные параметры инициализации файлов, для нашего примера это не критично.
-- Все файлы базы данных находятся в каталоге "D:\DBs"
-- Добавляем файлы для файловых групп
ALTER DATABASE [bsl]
ADD FILE ( NAME = N'bsl_fg_2', FILENAME = N'D:\DBs\bsl_fg_2.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
TO FILEGROUP [FILEGROUP_2]
GO
ALTER DATABASE [bsl]
ADD FILE ( NAME = N'bsl_fg_3', FILENAME = N'D:\DBs\bsl_fg_3.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
TO FILEGROUP [FILEGROUP_3]
GOОтлично, у нас есть две файловые группы "FILEGROUP_2" и "FILEGROUP_3", осталось их задействовать. Есть несколько основных вариантов:
- Мы можем вручную изменить основную файловую группу базы и сделать реструктуризацию средствами 1С.
- Мы можем пересоздать кластерный или другие индексы средствами T-SQL, указав для использования нужную файловую группу.
- Ничего не делать.
По третьему варианту написано довольно много примеров в сети, поэтому рассмотрим только первые два пункта. Все примеры будем делать на регистре сведений "История адресных объектов", который на стороне базы представлен таблицей "_InfoRg4683" с несколькими индексами.
Вперед через реструктуризацию
И так, для начала установим основную файловой группой — одну из тех, что добавили выше.
