Как повысить производительность большой базы 1С (700 Гб+) и стоит ли использовать выгрузку в dt файл

Системный администратор 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

Работа с базами данных объемом более 700 Гб в среде 1С:Предприятие на базе MS SQL Server накладывает особые требования к обслуживанию. Часто администраторы и разработчики задаются вопросом: поможет ли выгрузка базы в формат .dt и последующая загрузка «взбодрить» систему, уменьшить размер и ускорить работу? Разберем этот процесс подробно, основываясь на практическом опыте и системном подходе к оптимизации.

Эффективность выгрузки и загрузки через dt для больших баз

Рассмотрим ситуацию, когда база объемом около 700 Гб начинает «подтормаживать». Существует мнение, что пересоздание базы через логический бэкап (формат .dt) может очистить мусор и перестроить индексы. Проанализируем реальные цифры: для базы такого объема выгрузка может занять около 3 часов, а загрузка — около 6 часов. Хотя размер может уменьшиться (в некоторых случаях на 100 Гб и более), производительность от самой этой операции растет редко.

Важно понимать, что формат .dt — это логическая структура данных 1С. При загрузке SQL Server заново создает индексы с коэффициентом заполнения (Fill Factor) 100%. Это временно убирает фрагментацию, но при активной работе пользователей индексы быстро фрагментируются снова. Поэтому рассматривать .dt как основной метод ускорения базы нецелесообразно. Более того, для баз объемом свыше 1 Тб этот метод становится рискованным из-за возможных ошибок нехватки памяти или логической целостности.

Анализ дискового пространства и структуры базы

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


USE [ИмяВашейБазыДанных]
SELECT 
    DB_NAME(database_id) AS ИмяБазыДанных, 
    file_id, 
    name AS ИмяФайла, 
    type_desc, 
    size * 8. / 1024 AS ТекущийРазмер_MB, 
    size * 8. / 1024 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT) * 8. / 1024 AS СвободноеПространство_MB 
FROM sys.master_files 
WHERE database_id = DB_ID();

Если свободного места внутри файлов много (десятки гигабайт), процедура shrink (сжатие) может помочь уменьшить физический размер файла, но она крайне негативно влияет на фрагментацию индексов. Рассмотрим альтернативный путь — поиск «мусорных» таблиц. Часто огромный объем занимают:

  1. История изменений (версионирование объектов).
  2. Логи обмена данными.
  3. Регистры сведений с информацией об ошибках или временными данными сторонних систем (например, Битрикс).

Проанализируем размеры таблиц через стандартные отчеты SQL или запросы к sys.tables. Очистка таких «хвостов» может высвободить сотни гигабайт без использования .dt.

Оптимизация регистров и итогов: корень проблем производительности

Одной из самых частых причин тормозов в крупных базах является раздутая таблица итогов. Выясним причину на примере регистра ЗаказыПокупателей. Если в базе висят незакрытые заказы с 2016 года, таблица актуальных итогов будет содержать миллионы записей. При проведении любого документа система будет пытаться рассчитать остатки, просматривая этот огромный объем данных.

Разберем шаги по оптимизации регистров:

  1. Установка периода рассчитанных итогов. Проверим, на какую дату рассчитаны итоги в 1С. Они должны быть установлены на начало текущего или предыдущего месяца. Если период итогов отстал на годы, нагрузка на SQL при записи будет колоссальной.
  2. Техническое закрытие старых заказов. Если заказы не актуальны, их необходимо закрыть специальными корректировками регистров. Это перенесет записи из таблицы итогов в таблицу оборотов, что существенно ускорит поиск и расчет текущих остатков.
  3. Разделение итогов. Для высоконагруженных регистров включим режим разделения итогов, что поможет снизить блокировки при одновременной записи нескольких пользователей.

Регламентные операции на стороне MS SQL Server

Для базы объемом 700 Гб обычного обновления статистики может быть недостаточно. Рассмотрим правильный регламент обслуживания:

Тонкая настройка SQL Server под 1С

Проанализируем настройки самого сервера. Часто «из коробки» SQL Server настроен неоптимально для работы с 1С:

1. Max Degree of Parallelism (MAXDOP). Для 1С рекомендуется ограничивать параллелизм. Установим значение 1 (в редких случаях 2 или 4 для мощных многоядерных систем), чтобы тяжелые запросы не монополизировали процессорные ресурсы.

2. Настройка TempDB. Это «черновик» SQL сервера, через который проходят все временные таблицы 1С. Разместим файлы tempdb на самом быстром диске (NVMe/SSD). Количество файлов tempdb должно соответствовать количеству ядер (но обычно не более 8), и все они должны иметь строго одинаковый размер и шаг прироста.

3. Модель восстановления (Recovery Model). Если база не требует восстановления на конкретный момент времени (Point-in-time recovery), используем Simple. Если же выбрана модель Full, обязательно настроим частый бэкап транзакционного лога, иначе файл .ldf разрастется до терабайтных размеров.

Борьба с блокировками

Когда в базе работают более 100 пользователей, блокировки становятся неизбежными. Разберем, как их минимизировать:

Заключение: Перенос базы на более производительный сервер и SSD-диски — это эффективный, но «силовой» метод. Истинная причина тормозов больших баз обычно кроется в архитектурных излишках (старые итоги) и отсутствии регулярного глубокого обслуживания SQL. Выгрузка в .dt может быть полезна только как разовый метод переезда или проверки базы на логическую целостность.

← На главную