При обновлении конфигурации информационной базы 1С, особенно при переходе между релизами, можно столкнуться с критической ошибкой, которая прерывает процесс. Одна из самых частых причин — нехватка свободного места на диске сервера СУБД. Ошибка выглядит примерно так: ERROR: could not extend file ... No space left on device. Давайте подробно разберем, почему так происходит, сколько места действительно нужно и как решить эту проблему, даже если освободить место на основном диске невозможно.
Основная причина кроется в механизме реструктуризации. Когда мы вносим изменения в структуру объектов метаданных (например, добавляем новый реквизит в справочник или меняем тип данных в регистре), платформа 1С не изменяет существующую таблицу базы данных "на лету". Вместо этого она выполняет более безопасную последовательность действий:
Этот процесс гарантирует сохранность данных в случае сбоя, но требует значительного запаса дискового пространства. В момент копирования данных на диске одновременно существуют и старая, и новая версии таблицы. Если изменяется большая таблица, например, регистр накопления на несколько гигабайт, то и временная таблица потребует столько же места.
Если нужно дать быструю и простую рекомендацию системному администратору, не вдаваясь в глубокий анализ, можно использовать общепринятое правило.
Золотое правило: для успешной реструктуризации необходимо иметь свободное место в размере от 1.5 до 2 текущих размеров базы данных. То есть, если ваша база данных на сервере СУБД занимает 5 ГБ, вам следует попросить освободить как минимум 7.5-10 ГБ. Этот запас покрывает создание временных таблиц, перестроение индексов и рост журнала транзакций.
Важно понимать, что на требуемый объем влияют несколько факторов:
Что делать, если освободить достаточное количество места на диске с базой данных невозможно? В этом случае можно настроить саму СУБД так, чтобы она использовала для своих временных нужд другой, более свободный диск. Это не только решает проблему с местом, но и часто положительно сказывается на производительности. Рассмотрим, как это сделать для PostgreSQL и Microsoft SQL Server.
В PostgreSQL место для временных таблиц и файлов (например, для сортировки больших объемов данных) можно задать с помощью механизма табличных пространств (tablespaces). Мы можем создать отдельное табличное пространство на другом диске и указать серверу использовать его для временных нужд.
Разберем процесс по шагам:
D:. Создадим на нем папку, например, D:\pg_temp_space. Важно, чтобы у пользователя, от имени которого работает служба PostgreSQL, были полные права на этот каталог.CREATE TABLESPACE temp_space LOCATION 'D:/pg_temp_space';
Здесь temp_space — это имя нашего нового табличного пространства.
postgresql.conf (его расположение зависит от вашей ОС и способа установки PostgreSQL). Находим в нем параметр temp_tablespaces и присваиваем ему имя созданного пространства:
temp_tablespaces = 'temp_space'
Если параметр закомментирован (начинается с #), раскомментируйте его.
D:, а не на диске с основной базой данных.В MS SQL Server за все временные операции отвечает специальная системная база данных tempdb. Перенос ее файлов на другой, более быстрый и свободный диск — стандартная практика для оптимизации производительности и управления пространством.
Процесс переноса выглядит следующим образом:
tempdb:
SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('tempdb');
ALTER DATABASE подготовим перенос. Предположим, мы хотим перенести файлы на диск E:\MSSQL\TempDB\. Команды будут выглядеть так:
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'E:\MSSQL\TempDB\tempdb.mdf');
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'E:\MSSQL\TempDB\templog.ldf');
Здесь tempdev и templog — логические имена файлов данных и журнала tempdb, которые мы получили на первом шаге.
tempdb в новом месте.tempdb.mdf и templog.ldf с их первоначального места.Помимо нехватки места для временных таблиц, существуют и другие смежные проблемы, которые могут привести к ошибке.
transaction log, файл .ldf в MS SQL). Во время обновления он может очень сильно вырасти. Убедитесь, что на диске, где лежит файл журнала, достаточно места для его роста, а в настройках базы данных включено автоматическое расширение (autogrowth) с адекватным шагом.В итоге, решение проблемы No space left on device сводится либо к простому освобождению места по правилу "размер базы * 2", либо к более тонкой настройке сервера СУБД для использования дополнительных дисковых ресурсов. Второй подход является более предпочтительным для нагруженных и больших систем.