Сколько места на диске нужно для обновления (реструктуризации) базы 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация
← На главную

При обновлении конфигурации информационной базы 1С, особенно при переходе между релизами, можно столкнуться с критической ошибкой, которая прерывает процесс. Одна из самых частых причин — нехватка свободного места на диске сервера СУБД. Ошибка выглядит примерно так: ERROR: could not extend file ... No space left on device. Давайте подробно разберем, почему так происходит, сколько места действительно нужно и как решить эту проблему, даже если освободить место на основном диске невозможно.

Почему при обновлении заканчивается место на диске?

Основная причина кроется в механизме реструктуризации. Когда мы вносим изменения в структуру объектов метаданных (например, добавляем новый реквизит в справочник или меняем тип данных в регистре), платформа 1С не изменяет существующую таблицу базы данных "на лету". Вместо этого она выполняет более безопасную последовательность действий:

  1. Создает новую временную таблицу с уже измененной структурой.
  2. Копирует все данные из старой таблицы в новую.
  3. Удаляет старую таблицу.
  4. Переименовывает новую временную таблицу, присваивая ей имя старой.

Этот процесс гарантирует сохранность данных в случае сбоя, но требует значительного запаса дискового пространства. В момент копирования данных на диске одновременно существуют и старая, и новая версии таблицы. Если изменяется большая таблица, например, регистр накопления на несколько гигабайт, то и временная таблица потребует столько же места.

Оценка необходимого свободного пространства: простое правило

Если нужно дать быструю и простую рекомендацию системному администратору, не вдаваясь в глубокий анализ, можно использовать общепринятое правило.

Золотое правило: для успешной реструктуризации необходимо иметь свободное место в размере от 1.5 до 2 текущих размеров базы данных. То есть, если ваша база данных на сервере СУБД занимает 5 ГБ, вам следует попросить освободить как минимум 7.5-10 ГБ. Этот запас покрывает создание временных таблиц, перестроение индексов и рост журнала транзакций.

Важно понимать, что на требуемый объем влияют несколько факторов:

Продвинутые методы: управление временными файлами СУБД

Что делать, если освободить достаточное количество места на диске с базой данных невозможно? В этом случае можно настроить саму СУБД так, чтобы она использовала для своих временных нужд другой, более свободный диск. Это не только решает проблему с местом, но и часто положительно сказывается на производительности. Рассмотрим, как это сделать для PostgreSQL и Microsoft SQL Server.

Настройка временных файлов в PostgreSQL

В PostgreSQL место для временных таблиц и файлов (например, для сортировки больших объемов данных) можно задать с помощью механизма табличных пространств (tablespaces). Мы можем создать отдельное табличное пространство на другом диске и указать серверу использовать его для временных нужд.

Разберем процесс по шагам:

  1. Создаем каталог на свободном диске. Предположим, у нас есть свободный диск D:. Создадим на нем папку, например, D:\pg_temp_space. Важно, чтобы у пользователя, от имени которого работает служба PostgreSQL, были полные права на этот каталог.
  2. Создаем табличное пространство. Подключаемся к базе данных с правами суперпользователя (например, через pgAdmin) и выполняем SQL-команду:

    CREATE TABLESPACE temp_space LOCATION 'D:/pg_temp_space';

    Здесь temp_space — это имя нашего нового табличного пространства.

  3. Указываем новое пространство в конфигурационном файле. Находим и открываем файл postgresql.conf (его расположение зависит от вашей ОС и способа установки PostgreSQL). Находим в нем параметр temp_tablespaces и присваиваем ему имя созданного пространства:

    temp_tablespaces = 'temp_space'

    Если параметр закомментирован (начинается с #), раскомментируйте его.

  4. Перезапускаем службу PostgreSQL. После сохранения изменений в файле конфигурации необходимо перезапустить сервер, чтобы они вступили в силу. Теперь все временные файлы будут создаваться на диске D:, а не на диске с основной базой данных.

Перенос системной базы tempdb в Microsoft SQL Server

В MS SQL Server за все временные операции отвечает специальная системная база данных tempdb. Перенос ее файлов на другой, более быстрый и свободный диск — стандартная практика для оптимизации производительности и управления пространством.

Процесс переноса выглядит следующим образом:

  1. Определяем текущее расположение файлов. Выполним в SQL Server Management Studio (SSMS) следующий запрос, чтобы узнать, где сейчас лежат файлы tempdb:

    SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('tempdb');

  2. Изменяем расположение файлов. С помощью команды 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, которые мы получили на первом шаге.

  3. Перезапускаем службу SQL Server. Изменения вступят в силу только после перезапуска. Сервер автоматически создаст файлы tempdb в новом месте.
  4. Удаляем старые файлы. После успешного перезапуска и проверки, что все работает, можно безопасно удалить старые файлы tempdb.mdf и templog.ldf с их первоначального места.

Что еще стоит проверить?

Помимо нехватки места для временных таблиц, существуют и другие смежные проблемы, которые могут привести к ошибке.

В итоге, решение проблемы No space left on device сводится либо к простому освобождению места по правилу "размер базы * 2", либо к более тонкой настройке сервера СУБД для использования дополнительных дисковых ресурсов. Второй подход является более предпочтительным для нагруженных и больших систем.

← На главную