Показать сообщение отдельно
Старый 18.12.2015, 12:58   #1  
Pokersky09 is offline
Pokersky09
Участник
 
43 / 60 (3) ++++
Регистрация: 15.11.2012
Адрес: Turkey
? Пакетные задания, SPID/Session
Доброго дня!

Существует проблема в нехватке количества 32 767 одновременных соединений к SQL серверу.
Обрабатываемая задача: загрузка данных из файлов csv.


Текущая конфигурация DAX:
• Ax2012 R3 (Системная версия: 6.3.1000.1928 Версия приложения: 6.3.1000.473)
• AOS x6
• SQL 2014
• Пользователей нет

Текущие настройки:
• Макс кол-во сессий: по 500 на AOS, итого 500*6 = 3000 сессий в пакетных заданиях (в настройках Администрирования Ах пишется как кол-во потоков).
• Макс кол-во подключений на SQL = не ограничено (макс системный порог 32 767)

Наблюдения:
При работе некоторых классов загрузки, кол-во соединений около 2,5 на 1 сессию. Иногда кол-во соединений достигает 80-100 на 1 поток, что приводит к превышению макс.кол-ва подключений и вылету всех AOS, с выдачей соотв. сообщений в журналы.

В любой момент времени работы пакетов, запросом sp_who на sql сервере видно что 99% SPID в состоянии sleeping_AwaitingCommand.

По завершении пакетного задания (точнее каждого Batch), подключения к sql исчезают, однако активные сессии, созданные пакетным заданием, по прежнему остаются на некоторое время, затем сами по себе исчезают.
Блокировок на sql сервере не наблюдается в любой момент.

Временным решением является сокращение кол-ва доступных потоков на АОСах до 100, в этом случае кол-во соединений остается в рамках квоты sql. Однако скорость загрузок резко ухудшается.

Алгоритм загрузки
-Обращение к таблице, для выявления существования ранее загруженной строки
-Заполнение курсора (в т.ч. обращение к справочникам для получения RecId)
-Update/Insert или пропуск строки, если существующая строка идентична.

Загрузка возможна одновременно в несколько таблиц, например SalesAgreementHeader, LogisticsLocation, LogisticsPostalAddress.

Влияние кол-ва конечных таблиц, куда идет запись, а также кол-во связанных справочников (куда идут запросы на получение RecId курсоров), не обязательно приводит к увеличению кол-ва подключений к SQL, относительно простейшей загрузки в 1 таблицу без Relation. Однако значение количества SPID/Session всегда примерно одинаково для каждого класса.

Вопросы:

1) По какому принципу формируется минимальное кол-во подключений к sql серверу, и есть ли четкая связь с элементами кода Ах?

2) Когда подключение прекращается, и в каких случаях переводится в sleeping?

3) Предусмотрены ли способы управления/контроля/ограничения максимальным кол-ом соединений (не сессий) со стороны Ах, чтобы исключить данную проблему?

4) Каков механизм снятия сессий, после завершения пакетного задания?

Последний раз редактировалось Pokersky09; 18.12.2015 в 13:02.