В процессе эксплуатации крупных информационных баз 1С (от сотен гигабайт) администраторы и разработчики нередко сталкиваются с ситуацией, когда штатные процедуры обслуживания, такие как «Тестирование и исправление» с реструктуризацией, выполняются слишком долго, прерываются пользователем или завершаются аварийно. После такой отмены размер файла базы данных (.mdf) не только не уменьшается, но и резко увеличивается, а свободное дисковое пространство исчерпывается. Разберем по шагам, почему это происходит, как провести детальный анализ структуры базы и какими методами можно безопасно вернуть и сократить занимаемый объем.
Проанализируем ситуацию, происходящую внутри СУБД во время выполнения реструктуризации. Механизм реструктуризации 1С устроен следующим образом:
_TEMP, _NG).Если этот длительный процесс отменяется или прерывается принудительно, СУБД откатывает незавершенную транзакцию. При этом временные таблицы реструктуризации не всегда удаляются платформой корректно и могут остаться в базе данных в виде «мусора». Кроме того, массовая отмена операций приводит к катастрофической фрагментации страниц данных и индексов, из-за чего таблицы занимают в разы больше физических страниц в файле .mdf при том же количестве реальных строк. Также важно учитывать, что на базах объемом свыше 100 Гб штатная выгрузка в файл .dt крайне нестабильна и часто завершается ошибкой нехватки памяти, поэтому администрирование баз такого масштаба необходимо выполнять исключительно средствами СУБД.
Прежде чем предпринимать какие-либо действия по очистке или сжатию, необходимо выяснить, какие именно объекты занимают основной объем. Заниматься оптимизацией вслепую неэффективно.
Для детального анализа выполним следующие действия в среде SQL Server Management Studio (SSMS):
В сформированном отчете анализируем первые 10–20 самых объемных таблиц. Обращаем внимание на следующие моменты:
_TEMP, _NG или нестандартными идентификаторами, оставшиеся после незавершенного тестирования и исправления._AccumRg, _AccRg) и таблицы пересчета итогов (_AccumRgOpt)._VT, хранилища значений, прикрепленные файлы, картинки, сканы документов, электронные письма.Если анализ показал наличие зависших таблиц реструктуризации, их необходимо удалить средствами СУБД, предварительно сделав полную резервную копию базы данных. После удаления ненужных объектов важно соблюдать строгую последовательность сервисных процедур.
Правильный порядок обслуживания после удаления лишних данных:
NVARCHAR, VARBINARY, IMAGE) при удалении больших объемов данных выполняется команда DBCC CLEANTABLE, которая освобождает страницы, занятые удаленными переменными колонками.ALTER INDEX ALL ON [ИмяТаблицы] REBUILD устраняет внутреннюю фрагментацию, уплотняет страницы данных и высвобождает пустое пространство внутри файлов..mdf с помощью команды DBCC SHRINKFILE или через меню Tasks -> Shrink -> Files. Выполнение сжатия до дефрагментации приводит к мгновенному повторному росту базы и деградации производительности.PAGE compression) или строк (ROW compression) для крупных таблиц регистров и документов. Это позволяет сократить физический размер базы данных на 40–60% без изменения метаданных в 1С.Если требования бизнеса запрещают удаление исторических документов прошлых лет (например, за 2012 год), уменьшить объем информационной базы можно за счет избирательной свертки регистров.
Рассмотрим варианты оптимизации на уровне логики 1С:
ХранилищеЗначения внутри базы.Когда рабочая база не может быть остановлена на несколько суток для длительного тестирования и исправления, а свободного места на сервере не хватает, используем технологию распределенной информационной базы (РИБ):