При эксплуатации информационных систем на платформе 1С:Предприятие администраторы часто сталкиваются с неконтролируемым ростом размера базы данных. Одной из частых причин является увеличение системной таблицы _DataHistoryQueue0. В данной статье мы разберем, за что отвечает эта таблица, почему в ней накапливаются данные и какие методы устранения проблемы являются безопасными.
Прежде чем приступать к каким-либо действиям, важно осознать, что _DataHistoryQueue0 не является таблицей, которую пользователь должен очищать вручную. Это служебная таблица платформы, предназначенная для работы механизма версионирования объектов (истории данных). Она выполняет роль промежуточного буфера или очереди.
Алгоритм работы системы выглядит следующим образом:
_DataHistoryQueue0.Обновление истории данных периодически считывает записи из этой очереди и переносит их в основные таблицы хранения версий (например, _DataHistoryVersions).Если таблица «пухнет», это означает, что скорость поступления записей в очередь превышает скорость работы фонового задания, либо само задание столкнулось с ошибками при попытке записи в постоянные таблицы.
Многие администраторы, привыкшие чистить регистры сведений с помощью SQL-запросов (используя DELETE или TRUNCATE), склонны применять те же методы к системным таблицам платформы. Это крайне опасно.
Использование TRUNCATE TABLE _DataHistoryQueue0 приведет к следующим последствиям:
В отличие от прикладных регистров сведений, системные таблицы 1С имеют сложную структуру взаимосвязей. Мы настоятельно рекомендуем избегать прямого доступа к ним на уровне СУБД. При необходимости очистки прикладных данных стоит использовать специализированные инструменты, которые позволяют выборочно удалить организацию с сохранением ссылочной целостности базы.
Рассмотрим последовательность шагов, которые помогут нам нормализовать работу системы без риска повреждения базы данных. Для автоматизации этих действий и регулярного контроля технического состояния полезно настроить обслуживание и тестирование баз 1С по расписанию.
Консоль администрирования серверов 1С и перейдите в раздел Фоновые задания. Найдите задание с названием Обновление истории данных. Проверьте его статус: нет ли ошибок, не завершается ли оно аварийно.Обновление истории данных запускается достаточно часто. Если объем данных огромен, дайте системе время на выполнение фоновой обработки в периоды низкой нагрузки.Мы часто забываем, что удаление данных из SQL-таблицы не приводит к мгновенному сжатию файла базы данных (mdf/ldf). SQL Server помечает освободившееся место как свободное внутри самого файла, но не отдает его операционной системе.
После того как регламентное задание корректно очистит очередь, мы можем рассмотреть возможность сжатия (shrink) базы данных. Однако делать это нужно крайне аккуратно: частое выполнение сжатия ведет к сильной фрагментации индексов, что в долгосрочной перспективе существенно замедлит работу всей системы. Рекомендуем выполнять обслуживание индексов сразу после процедуры сжатия.
Проанализировав ситуацию, мы пришли к выводу, что очистка _DataHistoryQueue0 — это задача для платформы 1С, а не для системного администратора SQL. Если таблица продолжает расти, сфокусируйте усилия на устранении причин, мешающих фоновому заданию Обновление истории данных выполнять свою работу. Не прибегайте к прямому удалению записей через SQL — это может привести к непредсказуемым сбоям в работе прикладного решения.