Перевожу клиента на клиент-серверный вариант работы 1С. В целях попытаться сэкономить на лицензиях в качестве движка БД выбрали (пробуем) PostgresQL.
Конфигурация:
Сервер 32G RAM, Intel Core i7-6700, 3.4Ghz
Windows Server 2012 x64
SSD RAID 256 Гб
1С-server 32бита
postgresql-9.4.2-1.1C(x64) - (дистрибутив скачан с сайта ИТС)
Базы: основная УТ 11 (11.2.3.185) с обменами в бухгалтерии (16! баз) с использованием универсального формата.
Базы перевожу постепенно, чтобы поймать все костыли на "тестовой" эксплуатации.
К производительности проблем нет, всё "летает", но при выполнении некоторых отчетов (произвольных) как в УТ, так и в бухгалтериях вылетает ошибка:
Ошибка СУБД: out of memory for query result.
По результатам опроса интернета, настройки постгрес, помимо стандартных, выставлены следующие:
shared_buffers = 8GB
temp_buffers = 256MB
work_mem = 256MB
fsync = on
enable_mergejoin = off
effective_cache_size = 8GB
autovacuum = on
autovacuum_naptime = 10min
Но ошибка всё равно периодически воспроизводится (на прошлой неделе словили 1 раз). Пока решаю перезапуском сервера 1С и Postgres при случае инцидента, ошибка уходит.
Нагрузка относительно не большая. В УТ в пике 10-13 пользователей, в бухгалтерских базах по 1-2 пользователей (пока на клиент-серверный варинт переведены 4 бухгалтерских базы из 16). rphost съедает максимум 2,5-3,5 ГБ. Процессы постгреса по 50-100 мб. От общего объема оперативки максимум используется 30% с учетом процессов пользователей.
Подскажите, в чем может быть дело, каких параметров не хватает, куда вообще смотреть?
(9) Нет.
Это СУБД такая заботливая, сообщает что ее клиенту(т.е. серверу приложений 1С) не хватает памяти для получения результатов запроса.
Представитель сообщества разработчиков PostgreSQL так и пишет:
"Process memory allowed to the client; this is not a server-side error."
(13) неуместное предложение. Пользователи не будут особо вариантов предлагать, когда у них при наборе больших документов программа будет периодически вылетать. С каждым новым вылетом атмосфера будет накаляться. Это в общем случае. На следующей работе уже будете аккуратнее перезагружать сервер.
Конкретно в этом случае проблема в 32-битном сервере 1С. Если почитать mailing list постгри, то можно найти такую же ошибку, но только не связанную с 1С. Возникает эта ошибка тогда, когда приложение, запросившее данные из СУБД не может физически их получить, ибо упирается в ограничение по памяти.
Дальше смотрим ограничения по памяти. Опять-таки не 1С, а в целом. 2 гига для 32-разрядного приложения в 32-битной системе и 3,5 гига для 32-разрядного приложения в 64-битной системе. Цифры приблизительные, но суть понятна. Отсюда и наблюдения, что rphost больше 3.5 не отъедает. Он падает. Точнее не падает, а не может получить и отказывается, а постгря выдает ошибку.
А теперь почему помогает перезагрузка. Предположим объем данных из СУБД весит 1гб. Сервер только что после запуска, в него еще никто не зашел и rphost весит 500мб. Запрос отлично проходит, rphost начинает весить 1.5 гига. Другая ситуация - rphost запущен давно, пользователи работают, и rphost съел 3гб ОЗУ. И тут еще запрос на 1гб. Ошибка.