MSSQL Error 1105: Could not allocate space, filegroup is full — Решение
Ошибка 1105 возникает, когда ядро SQL Server не может выделить экстент свободного места для объекта (таблицы, индекса) в указанной файловой группе (обычно PRIMARY), так как все файлы группы исчерпали лимит размера или на диске отсутствует свободное место.
- Сообщение:
Could not allocate space for object '%.*ls' in database '%.*ls' because the '%.*ls' filegroup is full(Severity 17, State 1 to 2). - В 1С:Предприятие аварийно завершаются операции загрузки данных, проведение документов, обновление конфигурации и групповое перепроведение.
- Дисковый раздел, где расположены файлы
.MDF/.NDF, заполнен до 0 байт. - В свойствах файлов базы данных достигнуто ограничение
MAXSIZE.
1. Проверка свободного места на дисках и ограничений файлов
SELECT
df.name AS FileName,
df.physical_name,
df.size * 8 / 1024 AS SizeMB,
CASE WHEN df.max_size = -1 THEN 'UNLIMITED'
ELSE CAST(df.max_size * 8 / 1024 AS VARCHAR) END AS MaxSizeMB,
df.growth,
df.is_percent_growth,
fg.name AS FilegroupName
FROM sys.database_files df
LEFT JOIN sys.filegroups fg ON df.data_space_id = fg.data_space_id;2. Оперативное решение: Снятие лимита MAXSIZE и расширение файла
ALTER DATABASE [YourDatabaseName]
MODIFY FILE (
NAME = N'YourDatabaseName_Data',
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024MB
);3. Добавление дополнительного файла данных (NDF) на другой диск
Если на текущем диске физически закончилось место, добавьте вторичный файл данных на свободный диск без остановки работы пользователей:
ALTER DATABASE [YourDatabaseName]
ADD FILE (
NAME = N'YourDatabaseName_Data_2',
FILENAME = N'E:\MSSQL_Data\YourDatabaseName_Data_2.ndf',
SIZE = 10240MB,
FILEGROWTH = 1024MB,
MAXSIZE = UNLIMITED
) TO FILEGROUP [PRIMARY];4. Анализ самых больших таблиц 1С для очистки
SELECT TOP 10
t.name AS TableName,
s.name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 / 1024 AS TotalSpaceMB,
SUM(a.used_pages) * 8 / 1024 AS UsedSpaceMB
FROM sys.tables t
JOIN sys.indexes i ON t.object_id = i.object_id
JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.allocation_units a ON p.partition_id = a.container_id
LEFT JOIN sys.schemas s ON t.schema_id = s.schema_id
GROUP BY t.name, s.name, p.rows
ORDER BY TotalSpaceMB DESC; Частые вопросы (FAQ)
Почему ошибка 1105 возникает, если на диске еще есть 50 ГБ свободного места?
В свойствах конкретного файла данных (.MDF/.NDF) было задано жесткое ограничение параметра MAXSIZE, либо текущий шаг прироста (например, FILEGROWTH = 60GB) превышает остаток свободного места на физическом диске.
Безопасно ли добавлять второй файл NDF в файловую группу PRIMARY базы 1С?
Да, абсолютно безопасно. SQL Server автоматически использует алгоритм Proportional Fill и начнет распределять новые записи параллельно между файлами MDF и NDF.
Как влияет переполнение tempdb на появление ошибки 1105?
Если файловая группа PRIMARY переполнилась в базе данных tempdb, любые сложные запросы 1С с сортировками, соединениями и временными таблицами упадут с ошибкой 1105.
Поможет ли сжатие базы данных (DBCC SHRINKDATABASE)?
DBCC SHRINKDATABASE крайне не рекомендуется на регулярной основе, так как вызывает катастрофическую фрагментацию индексов и генерацию огромного объема логов транзакций.