При длительной эксплуатации информационных баз 1С, особенно сильно кастомизированных или самописных, их объем может достигать сотен гигабайт или даже терабайт. База начинает работать медленно, а стандартные регламентные операции занимают слишком много времени. В таких ситуациях перед нами часто встает вопрос: как правильно уменьшить размер базы данных, избавиться от лишней информации и вернуть системе былую производительность? Рассмотрим подробнее основные подходы, разберем причины "тормозов" и выясним, какие методы оптимизации наиболее эффективны.
Прежде чем приступать к удалению данных или переносу их в чистую базу, проанализируем ситуацию. Зачастую скорость работы в нормально спроектированной базе не зависит напрямую от ее физического объема. Тормоза могут быть вызваны совершенно другими причинами:
Поэтому первым шагом всегда должен быть сбор замеров производительности (например, с помощью технологического журнала) и выявление реальных узких мест.
Чтобы понять, что именно раздувает базу, посмотрим на размеры таблиц. Часто оказывается, что львиную долю места занимают технические данные, а не пользовательские документы.
Узнать структуру таблиц из самой 1С можно с помощью метода:
ТабДок = ПолучитьСтруктуруХраненияБазыДанных();
ТабДок.Показать();
В результатах анализа часто всплывают огромные таблицы вида _InfoRgChngRхххх. Это таблицы регистрации изменений для планов обмена. Если в базе настроен обмен данными (даже если он давно не используется), и есть "зависшие" или мертвые узлы, система будет бесконечно копить изменения всех объектов, что приведет к катастрофическому росту базы и тормозам при записи объектов. Для исправления достаточно удалить регистрацию изменений по неиспользуемым узлам (через стандартные обработки или программно).
Также много места могут занимать регистры "Версии объектов" (если не настроена автоматическая очистка старых версий) и регистры сведений с логами.
Если анализ показал, что старые данные действительно не нужны, и объем необходимо физически сократить, разберем доступные варианты.
1. Перенос данных в пустую базу (КД vs РИБ)
Многие рассматривают вариант переноса нужных справочников и остатков в пустую базу с помощью правил "Конвертации данных" (КД). Однако для больших объемов это очень медленный процесс. Значительно эффективнее создать план обмена по правилам РИБ (распределенная информационная база). Включив нужные объекты в состав плана обмена (с отключенной авторегистрацией), можно программно зарегистрировать только нужные данные и выгрузить их стандартными средствами платформы (XML-сериализация в этом случае работает в десятки раз быстрее, чем обработка через КД).
2. Свертка базы (Срезки)
Вместо удаления объектов вручную, лучше использовать стандартную методологию свертки. Она заключается в формировании документов ввода остатков по регистрам на определенную дату (например, конец прошлого года). После фиксации остатков, первичные документы за закрытый период помечаются на удаление и штатно удаляются с контролем ссылочной целостности. Старую базу при этом оставляют в режиме "только чтение" для исторических отчетов.
Если радикально обрезать базу нельзя, применим технологические решения на стороне 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С
Проанализируем ключевые настройки сервера:
И напоследок, обратим внимание на присоединенные файлы (сканы, договоры, картинки). Если они хранятся непосредственно в таблицах базы данных, объем БД будет расти стремительно. Настройка переноса файлов в тома на диске (на файловый сервер) позволяет моментально остановить рост SQL-базы, ускорить создание резервных копий и значительно снизить нагрузку на дисковую подсистему СУБД.