Как сжать большую базу 1С и увеличить производительность: варианты и методы?

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

При длительной эксплуатации информационных баз 1С, особенно сильно кастомизированных или самописных, их объем может достигать сотен гигабайт или даже терабайт. База начинает работать медленно, а стандартные регламентные операции занимают слишком много времени. В таких ситуациях перед нами часто встает вопрос: как правильно уменьшить размер базы данных, избавиться от лишней информации и вернуть системе былую производительность? Рассмотрим подробнее основные подходы, разберем причины "тормозов" и выясним, какие методы оптимизации наиболее эффективны.

Анализ причин медленной работы

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

  1. Отсутствие регулярного обслуживания: Не выполняются регламентные операции на уровне СУБД (перестроение индексов, обновление статистики).
  2. Неоптимальный код: В самописных конфигурациях могут быть узкие места в архитектуре или запросах, особенно при переходе со старых версий платформы на новые (с изменением механизмов клиент-серверного взаимодействия).
  3. Нерассчитанные итоги: Если итоги регистров накопления или бухгалтерии не пересчитываются и не актуализируются, системе приходится каждый раз пересчитывать их "на лету" с самого начала ведения учета.

Поэтому первым шагом всегда должен быть сбор замеров производительности (например, с помощью технологического журнала) и выявление реальных узких мест.

Определение самых больших таблиц

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

Узнать структуру таблиц из самой 1С можно с помощью метода:


ТабДок = ПолучитьСтруктуруХраненияБазыДанных();
ТабДок.Показать();

В результатах анализа часто всплывают огромные таблицы вида _InfoRgChngRхххх. Это таблицы регистрации изменений для планов обмена. Если в базе настроен обмен данными (даже если он давно не используется), и есть "зависшие" или мертвые узлы, система будет бесконечно копить изменения всех объектов, что приведет к катастрофическому росту базы и тормозам при записи объектов. Для исправления достаточно удалить регистрацию изменений по неиспользуемым узлам (через стандартные обработки или программно).

Также много места могут занимать регистры "Версии объектов" (если не настроена автоматическая очистка старых версий) и регистры сведений с логами.

Варианты переноса и обрезки данных

Если анализ показал, что старые данные действительно не нужны, и объем необходимо физически сократить, разберем доступные варианты.

1. Перенос данных в пустую базу (КД vs РИБ)

Многие рассматривают вариант переноса нужных справочников и остатков в пустую базу с помощью правил "Конвертации данных" (КД). Однако для больших объемов это очень медленный процесс. Значительно эффективнее создать план обмена по правилам РИБ (распределенная информационная база). Включив нужные объекты в состав плана обмена (с отключенной авторегистрацией), можно программно зарегистрировать только нужные данные и выгрузить их стандартными средствами платформы (XML-сериализация в этом случае работает в десятки раз быстрее, чем обработка через КД).

2. Свертка базы (Срезки)

Вместо удаления объектов вручную, лучше использовать стандартную методологию свертки. Она заключается в формировании документов ввода остатков по регистрам на определенную дату (например, конец прошлого года). После фиксации остатков, первичные документы за закрытый период помечаются на удаление и штатно удаляются с контролем ссылочной целостности. Старую базу при этом оставляют в режиме "только чтение" для исторических отчетов.

Оптимизация на уровне СУБД (MS SQL Server)

Если радикально обрезать базу нельзя, применим технологические решения на стороне SQL Server:

Сжатие данных (Data Compression)

MS SQL Server поддерживает сжатие строк (Row Compression) и страниц (Page Compression). Платформа 1С официально совместима с этим механизмом. Включение Page Compression для крупных таблиц (особенно некластерных индексов и регистров сведений) может уменьшить объем базы на диске на 30–60%. Меньший размер данных означает, что при чтении с диска в оперативную память загружается больше полезной информации, что ускоряет выполнение запросов.

Правильное сжатие файла (Shrink)

Если вы удалили много данных в 1С (например, почистили огромную таблицу регистрации изменений), физический файл базы (.mdf) на диске не уменьшится. SQL просто пометит страницы как пустые. Для возврата места операционной системе нужно выполнить операцию Shrink. Однако важно помнить: эта операция вызывает сильнейшую фрагментацию индексов. Правильный порядок действий: удаление данных -> выполнение DBCC SHRINKFILE -> полное перестроение индексов (Index Rebuild) и обновление статистики.

Настройка параметров SQL Server под 1С

Проанализируем ключевые настройки сервера:

  1. MAXDOP: Значение Maximum Degree of Parallelism для баз 1С настоятельно рекомендуется устанавливать в 1, чтобы избежать блокировок при попытках SQL распараллелить тяжелые запросы.
  2. TempDB: Системную базу временных таблиц необходимо размещать на самых быстрых SSD-накопителях. Количество файлов данных TempDB следует привести в соответствие с количеством логических ядер процессора (обычно от 4 до 8).
  3. Ограничение памяти: Обязательно установите параметр Max Server Memory, оставив операционной системе и процессам сервера 1С (rphost) достаточно памяти для работы (минимум 4-8 ГБ).

Хранение присоединенных файлов

И напоследок, обратим внимание на присоединенные файлы (сканы, договоры, картинки). Если они хранятся непосредственно в таблицах базы данных, объем БД будет расти стремительно. Настройка переноса файлов в тома на диске (на файловый сервер) позволяет моментально остановить рост SQL-базы, ускорить создание резервных копий и значительно снизить нагрузку на дисковую подсистему СУБД.

← На главную