Регламентные и фоновые задания на отдельном сервере. Модуль с возвращаемыми значениями
Друзья, приветствую!
Прошу совета. Или ткните в ман.
Платформа 1С:Предприятие 8.3 (8.3.13.1644)
Комплексная автоматизация, редакция 1.1 (1.1.90.1) (доработанная серьезно).
Три сервера:
- 1S_1 x64
- 1S_2 x64
- SQL x64 (тут только MS SQL Std)
Сервер 1С в кластере:
На 1S_1 работают пользователи, точнее, обслуживаются их сеансы.
На 1S_2 работают только регламентные и фоновые задания
Настройка 1S_2
Клиентское соединение с ИБ - Назначать - BackgroundJob.Report - 0
Клиентское соединение с ИБ - Назначать - BackgroundJob.CommonModule - 0
Клиентское соединение с ИБ - Назначать - BackgroundJob.ScheduledJob - 0
Для всех - Не Назначать - Для всех - 0
И все вроде хорошо, но.
Есть регламентное задание, которое порождает множество фоновых заданий.
Фоновые задания выполняю сбор данных и формируют файлы Excel.
Перед сбором данных, в параметр сеанса, выкладывается две таблицы:
1. На 20К строк
2. На 110К строк
Эти две таблицы заворачиваются в структуру и сохраняются как ХранилищеЗначения в параметре сеанса.
Затем, есть код, который в процессе сбора данных очень часто обращается к таблице на 110К строк. Для получения из нее данных, есть специальный модуль, с функцией возвращаемого значения. Этот модуль, вынимает из параметра сеанса структуру, берет из нее таблицу и ее возвращает.
В итоге, часть документов выгружается нормально, а часть нет, с выходом в "Недостаточно памяти для выполнения операции на один вызов".
Мы проверили, могла ли таблица разрастись в какой либо момент. Нет, все те же 110К строк.
Сняли лимит на количество памяти на один вызов (-1)
Увеличили pagefile
В итоге, не работает. Ошибка та же.
Сняли с модуля опцию на возвращаемые значения.
Ошибка исчезла. В итоге, вместо этого, сеанс просто стал падать аварийно.
Вернули обратно опцию.
Ошибка вернулась. "Недостаточно памяти для выполнения операции на один вызов"
Перенесли все задания на сервер 1S_1 (где работают пользователи).
Все работает!
Вернули обратно на 1S_2
Ошибка вернулась.
Скажите, мы либо настроили сервер неправильно, не указав какую то ещё директиву требованиях назначений, либо есть какое-то недокументированное (или наоборот) ограничение на работу с модулями возвращаемых значений, при использовании их в регламентных и фоновых заданиях, на специально выделенных серверах кластера, для этих целей?
Буду очень признателен. Спасибо!
Прошу совета. Или ткните в ман.
Платформа 1С:Предприятие 8.3 (8.3.13.1644)
Комплексная автоматизация, редакция 1.1 (1.1.90.1) (доработанная серьезно).
Три сервера:
- 1S_1 x64
- 1S_2 x64
- SQL x64 (тут только MS SQL Std)
Сервер 1С в кластере:
На 1S_1 работают пользователи, точнее, обслуживаются их сеансы.
На 1S_2 работают только регламентные и фоновые задания
Настройка 1S_2
Клиентское соединение с ИБ - Назначать - BackgroundJob.Report - 0
Клиентское соединение с ИБ - Назначать - BackgroundJob.CommonModule - 0
Клиентское соединение с ИБ - Назначать - BackgroundJob.ScheduledJob - 0
Для всех - Не Назначать - Для всех - 0
И все вроде хорошо, но.
Есть регламентное задание, которое порождает множество фоновых заданий.
Фоновые задания выполняю сбор данных и формируют файлы Excel.
Перед сбором данных, в параметр сеанса, выкладывается две таблицы:
1. На 20К строк
2. На 110К строк
Эти две таблицы заворачиваются в структуру и сохраняются как ХранилищеЗначения в параметре сеанса.
Затем, есть код, который в процессе сбора данных очень часто обращается к таблице на 110К строк. Для получения из нее данных, есть специальный модуль, с функцией возвращаемого значения. Этот модуль, вынимает из параметра сеанса структуру, берет из нее таблицу и ее возвращает.
В итоге, часть документов выгружается нормально, а часть нет, с выходом в "Недостаточно памяти для выполнения операции на один вызов".
Мы проверили, могла ли таблица разрастись в какой либо момент. Нет, все те же 110К строк.
Сняли лимит на количество памяти на один вызов (-1)
Увеличили pagefile
В итоге, не работает. Ошибка та же.
Сняли с модуля опцию на возвращаемые значения.
Ошибка исчезла. В итоге, вместо этого, сеанс просто стал падать аварийно.
Вернули обратно опцию.
Ошибка вернулась. "Недостаточно памяти для выполнения операции на один вызов"
Перенесли все задания на сервер 1S_1 (где работают пользователи).
Все работает!
Вернули обратно на 1S_2
Ошибка вернулась.
Скажите, мы либо настроили сервер неправильно, не указав какую то ещё директиву требованиях назначений, либо есть какое-то недокументированное (или наоборот) ограничение на работу с модулями возвращаемых значений, при использовании их в регламентных и фоновых заданиях, на специально выделенных серверах кластера, для этих целей?
Буду очень признателен. Спасибо!
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
При работе с такими объемами память кончится рано или поздно ...
Мой совет перенести две таблицы в "память sql сервера"
Создаем Справочник.ДвеТаблицы затем создаем два новых элемента - заполняем их данными;
В параметр сеанса выкладываем Ссылку/Код на Элемент
Перед сбором данных, в параметр сеанса, выкладывается две таблицы:
1. На 20К строк
2. На 110К строк
1. На 20К строк
2. На 110К строк
При работе с такими объемами память кончится рано или поздно ...
Мой совет перенести две таблицы в "память sql сервера"
Создаем Справочник.ДвеТаблицы затем создаем два новых элемента - заполняем их данными;
В параметр сеанса выкладываем Ссылку/Код на Элемент
(5)
Спасибо за совет!
Там получиться так, что к справочнику за данными сеанс обратиться порядка 500 раз. Я понимаю, что это звучит дико, но "это" досталось по наследству. Есть план по оптимизации, но его бюджет его надо утвердить.
В сущности, программисты пытались добиться максимальной производительности, отправляя таблицу в память сеанса, да ещё и с модулем повторно возвращаемых значений.
Другое дело, что как в ручном режиме, так и на первом сервере, все работает нормально.
Отсюда я и зацепился к тому, что вероятно есть ограничения на повторно возвращаемые значения, на сервере, который в кластере выполняет только регламенты и фоны.
Спасибо за совет!
Там получиться так, что к справочнику за данными сеанс обратиться порядка 500 раз. Я понимаю, что это звучит дико, но "это" досталось по наследству. Есть план по оптимизации, но его бюджет его надо утвердить.
В сущности, программисты пытались добиться максимальной производительности, отправляя таблицу в память сеанса, да ещё и с модулем повторно возвращаемых значений.
Другое дело, что как в ручном режиме, так и на первом сервере, все работает нормально.
Отсюда я и зацепился к тому, что вероятно есть ограничения на повторно возвращаемые значения, на сервере, который в кластере выполняет только регламенты и фоны.
(7)
Добрый день!
ТНФ на S1 есть.
Он зеркалит по регламентам и фонам, а в остальном разрешает все.
То есть, настройка S1
Клиентское соединение с ИБ - НЕ Назначать - BackgroundJob.Report - 0
Клиентское соединение с ИБ - НЕ Назначать - BackgroundJob.CommonModule - 0
Клиентское соединение с ИБ - НЕ Назначать - BackgroundJob.ScheduledJob - 0
Для всех - Назначать - Для всех - 0
ТНФ на S2 - Да
Спасибо!
Добрый день!
ТНФ на S1 есть.
Он зеркалит по регламентам и фонам, а в остальном разрешает все.
То есть, настройка S1
Клиентское соединение с ИБ - НЕ Назначать - BackgroundJob.Report - 0
Клиентское соединение с ИБ - НЕ Назначать - BackgroundJob.CommonModule - 0
Клиентское соединение с ИБ - НЕ Назначать - BackgroundJob.ScheduledJob - 0
Для всех - Назначать - Для всех - 0
ТНФ на S2 - Да
Спасибо!
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот