Exceptions de connexion intermittentes SQL Server 2000 sur un problème d’environnement spécifique au serveur de production?

StackOverflow https://stackoverflow.com/questions/424040

Question

Nous avons eu des problèmes intermittents pour que les utilisateurs soient déconnectés de force de l'application.

Notre configuration est une application Web ASP.Net/C# sur Windows Server 2003 Standard Edition avec SQL Server 2000 à l’arrière. Nous avons récemment effectué une mise à niveau majeure du produit sur le serveur VMWare de notre client (une instance d'invité nous est dédiée) et, bien que la version précédente ne présente aucun problème, la complexité supplémentaire que la nouvelle mise à niveau apporte au produit a entraîné une beaucoup de problèmes. Nous utilisons également SQL Server 2000 (version 8.00.2039 ou SP4) et l’application IIS / ASP.NET (.Net v2.0.50727) sur le même boîtier et se connectant entre eux via une connexion TCP / IP.

Principalement, les exceptions levées sont les suivantes:

  

System.IndexOutOfRangeException: impossible de trouver la table 0.

     

System.ArgumentException: La colonne 'mot de passe' n'appartient pas à la table Table.

[Cette exception se produit dans le script de connexion, même s'il existe clairement une colonne de mot de passe disponible]

  

System.InvalidOperationException: un DataReader ouvert à cette commande est déjà ouvert et doit être fermé en premier.

[Celui-ci se produit très régulièrement]

  

System.InvalidOperationException: cette transaction SqlTrans est terminée; il n'est plus utilisable.

     

System.ApplicationException: ExecuteReader nécessite une connexion ouverte et disponible. L'état actuel de la connexion est en cours de connexion.

     

System.Data.SqlClient.SqlException: le délai d'attente a expiré. Le délai d’expiration s’est écoulé avant la fin de l’opération ou le serveur ne répond pas.

Et juste aujourd'hui, pour la première fois:

  

System.Web.UI.ViewStateException: état d'affichage non valide.

Nous avons testé l'application en utilisant le même nombre d'utilisateurs simultanés que le serveur de production et nous ne pouvons pas reproduire ces erreurs. Ils sont très intermittents et se produisent même s’il n’ya que 8/9/10 connexions utilisateur. Mon instinct me dit que ses problèmes de connexion ASP.NET - SQL Server 2000 sont en cours.

Nous avons à peu près exclu les erreurs de couche d'accès aux données au niveau du code à ce stade (nous avons une équipe de développement composée de 15 développeurs expérimentés travaillant là-dessus). Nous pensons donc qu'il s'agit d'un problème spécifique d'environnement de serveur de production.

Était-ce utile?

La solution 3

Les gars, à titre de mise à jour, il s’est avéré que le problème était lié à VMWare dans le cadre d’une utilisation intensive - quelle semaine amusante! Nous modifions le code pour l'adapter à l'environnement VMWare et nous avons déjà constaté certaines améliorations.

Merci pour vos suggestions, je vous en remercie.

Autres conseils

L'erreur Invalid Viewstate est assez courante sur un site Web à trafic important. Toutefois, si vous avez récemment migré vers plusieurs serveurs Web, assurez-vous de partager la même clé d'ordinateur afin que Viewstate soit signé avec la même clé sur tous les serveurs. http://www.codinghorror.com/blog/archives/000132.html

Sur la base des autres erreurs, je suppose que vous utilisez des connexions partagées sur plusieurs threads. Vos connexions sont-elles stockées dans des variables statiques, dans l'état de l'application, dans la session ou dans un autre objet utilisé dans plusieurs demandes? Peut-être qu'il y a quelque part une table de hachage contenant des connexions, des commandes ou des transactions. Aucun des objets ADO.Net n'est thread-safe. Assurez-vous de ne les utiliser que de manière filetée.

Une autre possibilité est de faire circuler les objets ADO.NET sans les éliminer ni les gérer de manière cohérente. Peut-être sont-ils mis en cache dans le contexte de la demande ou quelque chose de ce genre?

Je sais que vous ne voulez pas entendre cela, mais les gens sont plus intelligents que je ne l’ai dit (consultez Code Complete de McConnell si vous ne me croyez pas):

C'est probablement votre code et votre instinct est probablement correct:

  

Mon instinct me dit que c'est ASP.NET - SQL   Problèmes de connexion au serveur 2000 ..

Les erreurs générées sont très spécifiques et, dans le contexte, elles semblent vouloir uniquement se connecter et vivre des moments difficiles - ce qui, si cela se produit uniquement dans l'environnement du client, peut indiquer un paramètre mal défini. pour que la machine virtuelle accède aux connexions TCP sur la machine hôte (sous une autre instance).

Êtes-vous sûr que aucun de votre code n'a été modifié qu'avant le déplacement et que votre environnement précédent avait une journalisation comme celle-ci activée? Cela se produisait peut-être (dans une moindre mesure) auparavant, mais votre environnement ne l'a pas détecté, car l'enregistrement n'est pas activé.

Si ce n'est pas le problème et que je lis votre message correctement: vous exécutez un serveur sur une instance d'invité fournie par le client sur son tuyau et sa bande passante? Si tel est le cas, il est tout à fait possible (à peu près au même moment que cette mise à niveau) de modifier la configuration du routage, de modifier le pare-feu ou de modifier le pare-feu, ou de modifier le pare-feu.

Si vous ne pouvez pas le reproduire dans votre environnement et que vous êtes 100% , il ne s'agit pas de votre code. alors logiquement, ce ne peut être que leur environnement qui pose problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top