При администрировании баз данных 1С на платформе Microsoft SQL Server системные администраторы и разработчики часто сталкиваются с парадоксальной ситуацией: документов в базе мало, данные активно удаляются, а размер файлов .MDF и .LDF остается огромным или даже неоправданно растет. В этой статье мы подробно разберем, почему так происходит, как настройки системных баз влияют на новые информационные базы и каким образом правильно высвобождать дисковое пространство без вреда для производительности.
Рассмотрим ситуацию, когда при создании абсолютно пустой базы в SQL Server ее размер мгновенно составляет несколько гигабайт (например, 10 Гб), хотя конфигурация весит всего несколько мегабайт. Причина кроется в механизме работы SQL Server с системной базой данных model.
Проанализируем ситуацию: база model является шаблоном для всех вновь создаваемых баз данных на сервере. Когда вы создаете новую базу через 1С или среду SQL Server Management Studio (SSMS), SQL Server просто копирует структуру и настройки из model. Если в настройках этой системной базы установлен параметр Initial Size (начальный размер) в 10 Гб, то любая новая база будет резервировать этот объем на диске сразу после создания.
Как это исправить:
model и выберем Properties (Свойства).Выясним причину, по которой после удаления 30 Гб «ненужных» документов и записей регистров размер файла базы данных (.mdf) не уменьшился ни на мегабайт. Это является штатным поведением SQL Server.
Когда данные удаляются из таблиц, SQL Server не отдает место операционной системе. Он просто помечает страницы внутри файла базы данных как «свободные» для повторного использования. Это сделано для оптимизации производительности: операция расширения файла на диске очень дорогая и ресурсоемкая, поэтому сервер предпочитает удерживать уже выделенное пространство «про запас».
Тестирование и исправление (ТИИ) в конфигураторе 1С в данном случае не поможет, так как ТИИ работает с логической структурой данных (объектами 1С), а не с физическим распределением байтов на диске в среде SQL.
Если вам критически важно вернуть свободное место операционной системе (например, заканчивается место на диске), необходимо выполнить операцию сжатия — Shrink. Разберем по шагам, как это сделать:
Для выполнения сжатия через графический интерфейс SSMS:
Однако более профессиональным подходом является использование T-SQL команд. Например, для сжатия файла данных до минимально возможного размера можно использовать следующую команду:
USE [Имя_Вашей_Базы];
GO
DBCC SHRINKDATABASE(N'Имя_Вашей_Базы');
GO
Важное предупреждение: Операция Shrink вызывает сильнейшую фрагментацию индексов. После ее завершения производительность 1С может значительно снизиться. Поэтому всегда после сжатия базы необходимо выполнять перестроение индексов (Rebuild Index).
Часто «раздувание» базы связано не с данными, а с файлом лога транзакций. Проанализируем настройки модели восстановления (Recovery Model):
.ldf будет расти до бесконечности.Чтобы сменить модель на простую и сжать лог, выполним следующие действия:
ALTER DATABASE [Имя_Вашей_Базы] SET RECOVERY SIMPLE;
GO
DBCC SHRINKFILE (N'Имя_Лог_Файла' , 1);
GO
Если после всех манипуляций база всё равно кажется подозрительно большой, стоит заглянуть внутрь структуры 1С. Рассмотрим основные «пожиратели» места:
ВерсииОбъектов. Со временем эта таблица может стать больше, чем все остальные данные вместе взятые. Проверьте настройки версионирования в разделе «Администрирование»..dt или очистка кэша конфигурации.Проанализировав ситуацию, мы можем сформулировать алгоритм действий для поддержания оптимального размера SQL-базы:
Simple.Shrink.Таким образом, большой размер базы при малом количестве документов чаще всего является следствием настроек резервирования места или особенностей ведения логов транзакций, а не реальным объемом полезной информации.