Pourquoi les connexions ne sont-elles pas réutilisées dans Mes iSeries/ASP?Net MVC 4 app?

nous exécutons une application web MVC 4 sur une ferme de serveurs Windows 2008. Nous avons essayé de mettre à niveau notre ferme de serveurs vers des serveurs Windows 2008 R2 64 bits, mais nous avons rencontré un problème avec la mise en commun des connexions sur une iSeries (exécution de V7R1). Nous appelons fréquemment les procédures stockées en java de DB2 et nous avons permis la mise en commun des connexions pour réduire le temps nécessaire pour établir des connexions. Voici un exemple de chaîne de connexion que nous utilisons.

<add name="DB2" connectionString="ConnectionTimeout=45;Pooling=true;MinimumPoolSize=1;MaximumPoolSize=-1;MaximumUseCount=100;CheckConnectionOnOpen=true;DataSource=XXX;Naming=SQL;DataCompression=True;UserID=username;password=pwd;DefaultCollection=XXX" />

Depuis 2008R2, le nombre de connexions (qzdasoinit jobs) augmente régulièrement sur les iSeries, nuisant aux performances sur les iSeries et donc dans notre application. La base de code est exactement la même chose que sur les serveurs 32 bits de 2008. Nous avons la plate-forme cible définie pour N'importe quel CPU et avons "Enable 32-bit Applications" définie à True dans IIS. Nous avons essayé de mettre à niveau vers ces serveurs plus tôt dans le mois et la réinitialisation IIS n'a pas automatiquement tué les connexions sur la boîte comme il est censé et nous n'en créerions pas de nouveaux jusqu'à ce que nous soyons complètement retournés à nos anciens serveurs.

on dirait presque qu'il ne détecte pas les connexions qui ont été faites et en crée continuellement de nouvelles. Est-ce que quelqu'un sait s'il y a une étape que nous avons manquée lors de la mise à niveau à 32 bits à 64 bits en ce qui concerne la mise en commun des connexions avec une iserie?

14
demandé sur Joel Anair 2013-12-13 19:07:02

3 réponses

récapitulation du problème: lors du déplacement d'un ASP.NET MVC 4 web application à partir d'une version 32 bits de Windows 2008 server batterie de serveurs Windows 2008 R2 64 bits, serveurs, le nombre de QZDASOINIT emplois créés sur notre IBM i passe d'environ 2 000 à environ 200 000. Le code de base est inchangée, la seule chose qui a changé est l'environnement d'exécution.

Quelques petites choses à savoir sur QZDASOINIT emplois... Par défaut, ces emplois sont créés dans le sous-système QUSRWRK (bien qu'ils peut aussi des cultures dans les QSYSWRK et QSERVER si le QUSRWRK le sous-système n'est pas actif lorsqu'une connexion ODBC est demandée). QUSRWRK est configuré pour créer un de ces QZDASOINIT dès le démarrage du sous-système. Si un pilote ODBC demande est faite et aucun QZDASOINIT les emplois sont disponibles, soit 2 de plus QZDASOINIT les travaux commenceront. QZDASOINIT job traitera 200 requêtes ODBC avant de terminer. Toutes ces valeurs par défaut et plus peuvent être changées en utilisant le CHGPJE ou CHGSBSD commande.

QZDASOINIT les emplois ont une ou deux"classes". L'exécution de ces tâches peut être affinée en utilisant ces classes.

vous pouvez trouver des informations sur votre actifQZDASOINIT les emplois en utilisant le DSPACTPJ la commande.

Ressources:

CHGPJE-Change Prestart Job Entry

CHGSBSD-Change Subsystem Description

CRTCLS-Create Classe

Dspactpj – Display Active Prestart Jobs

ENDHOSTSVR-End Host Server

ENDSBS-End Subsystem

WRKCLS-Work with Classes

considerations Performance with QZDASOINIT jobs

Possible "solution" #1:

dans votre chaîne de connexion du côté des fenêtres, changement MaximumPoolSize=-1MaximumPoolSize=XXX où XXX est un nombre qui permet à votre ASP.NET application to function reasonably well but doesn't degrade performance on the IBM i. Je suggérerais d'utiliser 2 000 car cela semblait tolérable lorsque l'application fonctionnait sur des serveurs 32 bits.

Possible "solution" #2:

demandez à un administrateur IBM i de faire quelques changements sur L'IBM i-puisque vous connaissez la plage D'adresses IP de votre ferme de serveur l'administrateur peut mettre en place un nouveau sous-système qui ne fera que servir vos connexions ODBC applications. Modifier le nombre maximal de permis QZDASOINIT emplois CHGPJE commande-encore une fois, je suggère de commencer à 2000 et de l'ajuster au besoin pour satisfaire les performances de votre application et l'impact sur L'IBM i. Si nécessaire, l'administrateur peut mettre en place un travail qui tuera tout le monde QZDASOINIT emplois dans le nouveau sous-système-soit en mettant fin à ce sous-système (ENDSBS) ou ENDHOSTSVR SERVER(*DATABASE) ENDACTCNN(*DATABASE) (je mettrait fin à l' sous-système mais votre administrateur saura ce qui fonctionnera le mieux dans votre environnement).

quelques autres suggestions qui ne sont pas des solutions en elles-mêmes mais qui peuvent être utiles:

limiter le nombre de threads à exécuter simultanément dans votre ASP.NET application. Évidemment pas une solution ou une chose facile à faire, mais quelque chose à mettre dans les notes pour la prochaine itération de l'application.

Modification MaximumUseCount=100 pour faire correspondre le nombre d'utilisations que vous utilisez avec le QZDASOINIT emplois.

j'ai mis des citations autour de" solutions " parce que bien qu'elles puissent vous permettre de déplacer votre application dans le nouvel environnement, elles ne règlent pas vraiment le problème.

7
répondu Benny Hill 2014-01-13 13:15:37

j'ai déjà vu des problèmes lorsqu'une application utilisant des pools de connexion fonctionne très bien en stand-a-lone, mais lorsqu'elle est exécutée dans un serveur d'application, vous vous retrouvez avec l'application et le serveur d'application qui font du pooling de connexion. Le problème est que le serveur d'application ne dévoile jamais la connexion.

Je ne suis pas assez familier avec ASP.NET ou IIS pour vous dire où regarder, mais peut-être que le ci-dessus est suffisant.

Si non, il serait utile de savoir

  • quelle version D'IBM iAccess vous avez chargé et plutôt c'est 32 ou 64 bits et de ce niveau de service pack.

  • le pilote utilisé. Je suppose que le pilote .NET, mais je sais que MS fournit des fonctionnalités pour utiliser les pilotes ODBC ou OLEDB avec .NET

Charles

1
répondu Charles 2014-01-09 22:13:32

désactiver le pooling de connexion pourrait résoudre votre problème. Dans la chaîne de connexion comprennent: Pooling=false;

0
répondu Jamir Déa Júnior 2015-01-12 13:38:34