При работе с базами данных 1С на платформе PostgreSQL администраторы нередко сталкиваются с критической ошибкой out of memory for query result в процессе выгрузки информационной базы в файл .dt через конфигуратор. Данная ошибка свидетельствует о том, что системе не хватает оперативной памяти для обработки результатов запроса, причем чаще всего это связано не с физическим отсутствием ресурсов, а с программными ограничениями архитектуры системы. Давайте разберем по шагам, как выявить причину и устранить эту проблему.
Одной из наиболее частых причин является использование 32-битной версии сервера 1С. В архитектуре Windows 32-битный процесс (в частности rphost) имеет жесткий лимит адресного пространства — до 3.5-4 ГБ оперативной памяти. При выполнении сложных запросов на выгрузку данных этот лимит быстро исчерпывается. Мы рекомендуем первым делом проверить, используете ли вы 32-битную версию платформы.
Решение: Переход на 64-битную версию сервера 1С позволяет рабочим процессам использовать весь доступный объем оперативной памяти, что снимает большинство подобных проблем при работе с объемными базами.
Часто ошибку вызывает некорректная настройка файла подкачки в Windows. Если на сервере установлено несколько дисков, и файл подкачки отключен или задан вручную как слишком маленький на диске, где расположены файлы базы данных, система может выдавать ошибку нехватки памяти.
Решение: Установите использование файла подкачки в параметрах системы в значение «По выбору системы». Убедитесь, что на дисках с базой данных достаточно свободного места для формирования временных файлов выгрузки.
Иногда причина кроется в неэффективных планах выполнения запросов, которые выбирает оптимизатор PostgreSQL. В частности, использование алгоритма merge join может требовать аномально больших объемов памяти.
Действия по настройке postgresql.conf:
enable_mergejoin через настройки СУБД. Это заставит оптимизатор искать альтернативные пути выполнения запроса.shared_buffers. Опыт показывает, что снижение этого значения (например, с 1500 МБ до 512 МБ) в ряде случаев позволяет стабилизировать процесс выгрузки, так как освобождает память для текущих операций конфигуратора.Если на одном сервере 1С запущено несколько информационных баз, они могут делить ресурсы одного процесса rphost. При выгрузке одной из баз происходит острая конкуренция за память.
Инструкция:
rphost для каждой базы, предотвращая их влияние друг на друга при выполнении ресурсоемких задач.Если ни один из вышеперечисленных методов не приводит к успеху, стоит рассмотреть обходные пути для получения резервной копии:
pg_dump: Выполните выгрузку базы средствами самой СУБД PostgreSQL. Полученный дамп можно развернуть на другой, более мощной машине (желательно с 64-битной ОС), где процесс выгрузки через конфигуратор 1С пройдет без проблем.Заключение: Большинство проблем с out of memory при работе с PostgreSQL решается переходом на современные 64-битные сборки платформы 1С и PostgresPro. Не забывайте регулярно проводить обслуживание базы данных (analyze, vacuum, reindex), чтобы индексы оставались актуальными, а оптимизатор запросов работал корректно.