При проведении документов, формировании отчетов или выполнении регламентных заданий в клиент-серверном режиме работы 1С:Предприятия пользователи могут столкнуться с критической ошибкой Microsoft SQL Server: «Не удалось выделить место для объекта... поскольку файловая группа Primary переполнена». Данная ошибка указывает на то, что СУБД не может расширить файл данных информационной базы (.mdf или .ndf) для записи новых таблиц, индексов или временных структур.
Разберем детально, почему возникает эта ошибка, как быстро восстановить работоспособность базы данных и какие превентивные меры необходимо принять.
Основные причины переполнения файловой группы PRIMARY
Проанализируем основные технические факторы, приводящие к блокировке записи в базу данных:
Исчерпание физического места на диске: на накопителе сервера, где расположены основные файлы базы данных, закончилось свободное пространство, из-за чего автоматический прирост файла не может выполниться.
Ограничения бесплатной редакции Microsoft SQL Server Express: для версий Express действует жесткий аппаратный лимит на максимальный объем одной базы данных — 10 ГБ (для устаревших версий SQL 2005/2008 — 4 ГБ). Как только база достигает этого порога, СУБД блокирует дальнейшее выделение страниц данных даже при наличии сотен свободных гигабайт на диске.
Ограничение максимального размера файла (MAXSIZE) в настройках базы: в свойствах файла базы данных может быть отключен параметр автоувеличения (Autogrowth) или установлен фиксированный предел размера, который был исчерпан.
Таймауты при автоприросте: если шаг прироста задан слишком большим объемом, а на сервере выключена мгновенная инициализация файлов (IFI), выделение нового пространства может занимать длительное время, вызывая сброс транзакции по таймауту 1С.
Дисковые квоты операционной системы: на уровне Windows Server могут быть настроены квоты дискового пространства NTFS для учетной записи службы SQL Server.
Способ 1. Проверка физического диска и перенос файлов
Первым делом проверим наличие свободного места на дисках сервера. Если накопитель переполнен, рассмотрим следующие шаги:
Освобождение пространства: удалим временные файлы, перенесем архивные резервные копии (.bak) на отдельное сетевое хранилище или другой физический диск.
Добавление вторичного файла данных: если перенести базу целиком невозможно, добавим в файловую группу PRIMARY дополнительный файл данных (.ndf), расположив его на другом диске с достаточным объемом свободного места. Это делается в SQL Server Management Studio (SSMS) в свойствах базы в разделе Files.
Смена модели восстановления: если файл журнала транзакций (.ldf) занял весь диск, переведем базу в простую модель восстановления (Simple) и выполним сжатие лога:
ALTER DATABASE [Имя_Базы_1С] SET RECOVERY SIMPLE;
GO
DBCC SHRINKFILE (Имя_Файла_Лога, 1024);
GO
Способ 2. Проверка редакции SQL Server и лимитов
Выясним, не уперлась ли база данных в лимиты редакции Express. Для этого выполним запрос в Management Studio:
SELECT @@VERSION;
EXEC sp_spaceused;
Если используется редакция Express Edition и текущий объем данных подошел к 10 ГБ, стандартное расширение диска не поможет. В такой ситуации необходимо либо перейти на платную редакцию (Standard / Enterprise), либо выполнить экстренную оптимизацию структуры базы данных 1С.
Способ 3. Корректировка параметров автоприроста (Autogrowth)
Проанализируем параметры расширения файлов базы данных в SSMS:
Откроем SQL Server Management Studio и подключимся к экземпляру СУБД.
В дереве объектов развернем узел Databases, нажмем правой кнопкой мыши по рабочей базе 1С и выберем Properties (Свойства).
Перейдем на вкладку Files (Файлы).
В строке файла строк данных (тип Rows Data) нажмем на кнопку с многоточием в столбце Autogrowth / Maxsize.
Убедимся, что установлен флаг Enable Autogrowth (Включить автоматический прирост).
В блоке Maximum File Size установим значение Unlimited (Неограниченно).
В блоке File Growth зададим фиксированный прирост в мегабайтах (например, 256 МБ, 512 МБ или 1024 МБ) вместо прироста в процентах, чтобы уменьшить фрагментацию и исключить задержки при расширении.
Способ 4. Включение мгновенной инициализации файлов (IFI)
Для того чтобы SQL Server мог мгновенно выделять место под файлы данных без заполнения пространства нулями, включим политику Instant File Initialization:
На сервере СУБД откроем оснастку Локальная политика безопасности (команда secpol.msc).
Перейдем в раздел Локальные политики -> Назначение прав пользователя.
Найдем параметр Выполнение задач по обслуживанию томов (Perform volume maintenance tasks).
Добавим учетную запись, под которой запускается служба SQL Server (MSSQLSERVER).
Перезапустим службу SQL Server для применения настроек.
Способ 5. Оптимизация и освобождение места средствами 1С
Рассмотрим, как уменьшить размер базы со стороны платформы 1С:Предприятие:
Перенос файлов документов на тома хранения: если в базе хранятся присоединенные файлы (сканы, PDF, офисные документы), настроим в разделе администрирования 1С хранение файлов на внешних томах жесткого диска вместо хранения в таблицах СУБД.
Очистка версий объектов и таблиц регистрации изменений: удалим неиспользуемые узлы планов обмена, которые накапливают таблицы изменений (_DocumentChanges, _ReferenceChanges), и запустим регламентное задание очистки устаревших версий.
Сжатие неиспользуемого пространства: после удаления лишних данных в 1С вернем освободившееся пространство операционной системе командой T-SQL без дефрагментации страниц:
DBCC SHRINKFILE (Имя_Файла_Данных, TRUNCATEONLY);
Применение комплекса этих мер позволит быстро устранить ошибку переполнения файловой группы PRIMARY и предотвратить подобные сбои в будущем.