2009-06-19 13 views
2

Nous avons ce problème étrange concernant le service de requête SQL Query. Nous avons une application Web principale fonctionnant avec le service QN, de sorte que l'élément de cache sur le Web reçoit une notification de SQL lorsque les données de surveillance ont changé. Et ça fonctionne bien. Ce qui est bizarre est quand l'autre service Web prenant en charge tente d'enregistrer abonnement QN dans SQL 2005 SP2 et cette erreur se produitErreur de notification de requête

« Exception système: SqlDependency.Start a été appelé pour le serveur la commande est en cours d'exécution contre plus d'une fois, mais il n'y a pas de serveur/utilisateur/base de données correspondant Appel Start() pour la commande en cours "

Cette erreur se produit uniquement lors d'une requête SQL dans SQLDependency par rapport à un DB d'instance particulier. L'autre DB d'instance fonctionne très bien.

Il n'y a pas beaucoup de ressources peuvent être trouvées pour les problèmes QN/service broker. Souhaite que quelqu'un a une expérience similaire peut partager leurs connaissances.

+0

Ce problème a été résolu, il était dû à un bug dans notre code en global qui n'exécutait pas SQLDepenedncy.start() toutes les instances en SQL. Cependant, sans SQLDependency en cours de démarrage, l'erreur devrait être quelque chose comme 'Si vous utilisez SqlDependency sans fournir de valeur d'option, SqlDependency.Start() doit être appelée pour chaque serveur en cours d'exécution'. Donc je me demande toujours pourquoi SQL génère cette erreur bizarre. – RocketsLee

Répondre

1

C'est l'un de ces domaines SQL Server où il n'y a pas trop d'experts de connaissances disponibles là-bas, inluding oserais-je dire, moi-même ;-)

Ma suggestion serait de publier votre requête sur le SQL officiel Server Service Broker Forum sur MSDN. Lien ci-dessous pour référence:

http://social.msdn.microsoft.com/Forums/en-US/sqlservicebroker/threads

1

cela signifie que la méthode Start() a déjà été appelé à ce DB. la méthode de démarrage a les restrictions que vous pouvez voir here en bas.

1

Ce n'est pas une réponse directe sur le sujet, mais sur la question des ressources QN/SSB j'ai quelques articles sur mon site:

Je suis un ancien développeur de la SQ L'équipe de L Server et moi-même avons été impliqués avec Service Broker et, plus ou moins, avec ses applications internes telles que les notifications de requêtes et SqlDependency, les notifications d'événements, dbMail etc.

+0

Merci pour l'info, Nous savons que les abonnements QN coûtent des ressources de SQL, Pouvez-vous nous indiquer combien d'abonnements QN sont trop nombreux pour un serveur SQL 2005 au niveau de l'entreprise? Nous implémentons QN dans notre application, nous testons OK mais nous avons des problèmes de performances sur le serveur de production. La dernière fois que j'ai vérifié, ils ont environ 3000 abonnements QN en SQL. Je me demande si c'est un problème ou non. Merci! – RocketsLee

+0

3000 modèles QN, requêtes QN ou 3000 appdomains souscrits? Chaque domaine d'application abonné à SqlDependency envoie un message WAITFOR RECEIVE sur le serveur qui bloque les threads. Vous devez configurer 'max worker threads' à des valeurs plus élevées, en ajoutant tous les domaines d'application client attendus à la valeur 'normal'. Chaque modèle de requête crée la vue indexée Faux métadonnées uniquement qui remarque les modifications, affectant ainsi les plans INSERT/UPDATE/DELETE. Et chaque requête souscrite a besoin d'un peu d'état (mémoire, disque). –

+1

Le vrai tueur tire la notification, qui prend des ressources (envoyer le message de notification, le recevoir = 1 insertion, 3 mises à jour et 1 supprimer (l'envoi) + 1 supprimer (la réception) Si vous avez 3000 QNs tirant chaque minute , ce qui représente 300 opérations DML supplémentaires par seconde pour votre E/S, sans compter le coût de la réabonnement –

Questions connexes