Sybase ASE: “Votre commande de serveur a rencontré une situation de blocage”
Lors de l'exécution d'une procédure stockée (à partir de un .NET application) qui ne une INSERTION et une mise à JOUR, j'ai parfois (mais pas souvent, en fait) et au hasard obtiens cette erreur:
ERREUR [40001] [DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]Votre serveur de commande (famille n ° id 0, id de processus #46) a rencontré une situation de blocage. S'il vous plaît ré-exécuter votre commande.
Comment puis-je résoudre ce problème?
Grâce.
- Savez-vous ce qu'un blocage est, pourquoi un blocage peut se produire ... et pourquoi cela se produit avec votre code? Avez-vous essayé de Googler comme "sybase" et "blocage"?
- Oui je sais ce que c'est, oui, j'ai googlé. La chose est, le blocage se produit très rarement. Comme la requête est simple (une mise à jour et un insert), il doit au pire d'être retardée par le serveur si certains autres de la serrure de blocage, pas simplement le jeter. Aussi, l'erreur ne peut pas dire que l'impasse sur (ce tableau, une ligne, etc.) ce qui le rend difficile à résoudre le problème. Je ne peux pas manuellement prévenir 2 requêtes d'arriver sur le serveur en même temps!
- Un blocage jamais retards d'autres processus, il s'arrête de l'autre processus de mort - j'aimerais en lire plus sur les blocages que vous havn pas fait preuve de compréhension
- Eh bien, c'est l'ensemble de point d'interrogation. Je suis en train de dire qu'il /doit/ devait être retardée, comme c'est le comportement que l'on attend. Bien sûr, le problème ici est que ce n'est pas le comportement que je reçois, qu'au lieu d'être retardé, il est à l'origine d'un blocage et d'être complètement bloqué.
Vous devez vous connecter pour publier un commentaire.
Votre meilleur pari pour la résolution de vous interblocage problème est de définir "imprimer les informations de blocage" sur l'aide de
sp_configure "imprimer les informations de blocage", 1
À chaque fois, il y a un blocage cela permettra d'imprimer les informations au sujet de ce processus ont été impliqués et quels sql qu'ils étaient en cours d'exécution au moment de la mort de verrouillage.
Si vos tables sont à l'aide de allpages de verrouillage. Il permet de réduire les blocages de passer à des datarow ou datapages de verrouillage. Si vous faites cela, assurez-vous de recueillir de nouvelles statistiques sur les tables et de recréer les index, les vues, les procédures stockées et les déclencheurs d'accéder aux tables qui sont modifiés. Si vous ne le faites pas, vous aurez des erreurs ou ne pas voir les avantages de la changer en fonction de ceux qui ne sont pas recréés.
J'ai un set de long terme des applications de temps en temps sur les genoux d'accès à la table et sybase va lancer cette erreur. Si vous cochez la case le serveur sybase journal, il vous donnera l'info complète sur le pourquoi c'est arrivé. Comme: Le sql qui a été impliqué les deux processus en essayant d'obtenir un verrou. Généralement, on essaie de le lire et de l'autre de faire quelque chose comme un supprimer. Dans mon cas, les applications sont en cours d'exécution en séparer Jvm, ne peut donc pas synchroniser suffit de nettoyer périodiquement.
En supposant que vos tableaux sont indexés correctement (et que vous êtes réellement en utilisant ces indices - toujours la peine de vérifier via le plan de requête), vous pourriez essayer de casser les composantes de la SP vers le bas et les emballer dans des opérations distinctes, de sorte que chaque unité de travail est terminée avant que le suivant commence.