Ответ 1
Резюме проблемы: при перемещении веб-приложения ASP.NET MVC 4 из 32-разрядной серверной фермы Windows 2008 на 64-разрядные серверы Windows 2008 R2 количество созданных QZDASOINIT
заданий на нашей IBM я скачки от 2000 до 200 000. База кода не изменяется, единственное, что изменилось, это среда выполнения.
Некоторые важные вещи, которые нужно знать о заданиях QZDASOINIT
... По умолчанию эти задания создаются в подсистеме QUSRWRK
(хотя они также могут встречаться в QSYSWRK
и QSERVER
, если подсистема QUSRWRK
не активен при запросе соединения ODBC). QUSRWRK
настроен на создание одного из этих QZDASOINIT
заданий сразу же после запуска подсистемы. Если выполняется запрос ODBC и нет заданий QZDASOINIT
, еще 2 задания QZDASOINIT
будут запущены. Каждое задание QZDASOINIT
будет обрабатывать 200 запросов ODBC до окончания. Все эти значения по умолчанию и многое другое можно изменить с помощью команд CHGPJE
или CHGSBSD
.
QZDASOINIT
имеют один или два класса. Выполнение этих заданий может быть настроено с помощью этих классов.
Вы можете узнать информацию о ваших активных действиях QZDASOINIT
с помощью команды DSPACTPJ
.
Ресурсы
CHGPJE - Изменить запись задания Prestart
CHGSBSD - Изменить описание подсистемы
DSPACTPJ - Показать активные задания Prestart
ENDHOSTSVR - Конечный хост-сервер
Рекомендации по производительности с заданиями QZDASOINIT
Возможное "решение" # 1:
В строке подключения на стороне Windows измените MaximumPoolSize=-1
на MaximumPoolSize=XXX
, где XXX - это некоторое число, которое позволяет вашему приложению ASP.NET функционировать достаточно хорошо, но не ухудшает производительность на IBM i. Я бы предложил использовать 2000, поскольку это казалось приемлемым, когда приложение выполнялось на 32-разрядных серверах.
Возможное "решение" # 2:
Попросите администратора IBM я внести некоторые изменения в IBM я - поскольку вы знаете диапазон IP-адресов фермы серверов, администратор может настроить новую подсистему, которая ничего не будет делать, кроме как обслуживать соединения ODBC приложений.
Измените максимальное количество разрешенных QZDASOINIT
заданий с помощью команды CHGPJE
- снова, я бы предложил начать с 2000 и настроить его по мере необходимости, чтобы удовлетворить вашу производительность приложения и влияние на IBM i. Если необходимо, администратор может настроить задание, которое убьет все задания QZDASOINIT
в новой подсистеме - либо закончив эту подсистему (ENDSBS), либо ENDHOSTSVR SERVER(*DATABASE) ENDACTCNN(*DATABASE)
(я бы закончил подсистему, но ваш администратор узнает, что будет работать лучше всего в вашей среде).
Некоторые другие предложения, которые не являются самими решениями, но могут быть полезными:
Ограничение количества одновременных выполнения потоков в приложении ASP.NET. Очевидно, что это не простое или легкое дело, а что-то, что нужно добавить в примечания для следующей итерации приложения.
Изменение MaximumUseCount=100
для соответствия любому счету использования, который вы используете с заданиями QZDASOINIT
.
Я помещаю цитаты вокруг "решений", потому что, хотя они могут позволить вам перенести ваше приложение в новую среду, они на самом деле не исправляют проблему.