J'ai des problèmes avec une base de données.
Je peux exécuter des requêtes de base, bien que beaucoup plus lentement que la normale.
Lorsque j'essaie d'afficher les arborescences de hiérarchie pour les tables, les vues ou les procédures dans l'Explorateur d'objets SSMS, j'obtiens
lock request time out period exceeded
.Mes rapports SSRS qui s'exécutent sur des objets de cette base de données ne se terminent plus.
Les travaux associés aux procédures stockées dans cette base de données ne s'exécutent pas non plus.
J'ai essayé d'utiliser sp_who2
pour trouver et tuer toutes les connexions sur la base de données, mais cela n'a pas résolu le problème.
Qu'est-ce qui se passe ici? Comment puis-je résoudre ça?
sql-server
sql-server-2008
Lloyd Banks
la source
la source
Réponses:
Elle était causée par l'annulation perpétuelle d'une transaction. J'ai finalement dû redémarrer mon cluster de serveurs
la source
À l'exception de Harware, vous devrez peut-être exécuter le script pour vérifier quelles sont les activités qui bloquent la session SQL, l'un des scénarios courants est de ne pas utiliser un
Implicit transactions Option
dans SQL Server Management Studio.la source
locking request time out period exceed
je dirais que couririmplicit transaction option
donnerait un meilleur indice des causes.J'ai eu ce problème lorsque j'ai commencé une transaction explicite dans laquelle j'ai créé une table dans tempdb à partir d'un script exécuté dans une autre base de données (pas tempdb). Lorsque j'ai validé la transaction, la validation n'a pas semblé libérer le verrou sur la table que j'avais créée dans tempdb.
Grâce à cette page , j'ai
USE
créé tempdb et exécutéDBCC OPENTRAN
et obtenu le SPID de la connexion à tempdb qui provoquait le verrouillage. Ensuite, jeKILL <SPID number>
le tuer.Pas très gracieux, et j'ai perdu toutes les informations dans le tableau que j'avais créé dans tempdb, mais c'était OK dans mon cas.
la source
Il y a tellement de choses que cela pourrait être que tout ce que je peux offrir sont quelques questions pour vous guider vers une réponse.
La base de données sur un serveur est-elle uniquement dédiée à l'exécution de SQL Server? Sinon, d'autres processus peuvent interférer en volant un temps processeur précieux.
Le serveur DB est-il essentiellement à court de mémoire? SQL Server tentera d'allouer chaque octet possible, mais s'il est à pleine capacité et que vos requêtes nécessitent davantage de données à charger, il doit alors recourir à la mémoire virtuelle, ce qui augmente radicalement le temps que même les requêtes simples peuvent prendre.
La bande passante réseau du serveur de base de données est-elle trop petite pour gérer le transfert des données en temps opportun?
À la fin de la journée, il semble que la machine sur laquelle vous hébergez SQL Server est sous-dimensionnée pour ce que vous essayez de faire. Il est tout à fait possible que vous ayez finalement atteint ces limites matérielles où les performances diminuent radicalement. Si tel est le cas (les questions ci-dessus vous aideront à le déterminer), vous souhaiterez déplacer la base de données vers un serveur correctement dimensionné pour la quantité de données (et de requêtes) que vous essayez de traiter.
Cela pourrait signifier utiliser des processeurs plus rapides, des disques plus rapides ou simplement installer plus de RAM.
la source
"Lorsque j'essaie d'afficher les arborescences de hiérarchie pour les tables, les vues ou les procédures dans SSMS Object Explorer, le délai d'expiration de la demande de verrouillage est dépassé."
J'avais exactement le même problème. Je suis allé à la fenêtre d'exécution de la requête et;
ROLLBACK
instruction tapée et exécutée .On dirait que certaines des séries de déclarations que j'exécutais avant cela, ont tenu une transaction ouverte. Plus précisément, parce que certains d'entre eux contenaient des instructions DDL. Une fois que j'ai émis la restauration, les hiérarchies d'objets ont commencé à fonctionner.
la source
Comme beaucoup l'avaient déjà fait remarquer, il y a généralement une transaction de longue durée, principalement causée par le manque utilisé SET IMPLICIT TRANSACTIONS ON, qui ne devrait pas être utilisé du tout. Pour voir pourquoi vérifier l'article perspicace de Brent Ozar
Quoi qu'il en soit, vous pouvez obtenir une liste des transactions en attente de longue durée en utilisant la requête suivante.
https://www.brentozar.com/archive/2018/02/set-implicit_transactions-one-hell-bad-idea/
la source