10
votes

SQL Server - Pourquoi ma SPID serait-elle "suspendue" mais non bloquée, tout en créant un index?

J'ai un serveur SQL 2005 x64, et lorsque j'essaie d'émettre des questions contre elle (par exemple, lorsque j'essaie de créer un index), mon spid va à "dormir" immédiatement et semble attendre indéfiniment. Il n'est pas bloqué (la colonne "Blkby" dans SP_Who2 est vide), et les valeurs de la CPU et de la discipline sont très petites (moins de 300 chacune) et ne poussent pas.

Que pourrait-on attendre ma requête? Si je fais une sélection * hors de la table, je vous indexer, j'obtiens tous les millions de rangées dans une minute environ, ce n'est donc pas bloqué l'accès à la table, ni même (il semble) contentions de table.

Toute réflexion sur d'autres choses que je pouvais vérifier? Dois-je juste donner et redémarrer mon instance SQL? :)

Détails: Je suis en cours d'exécution de l'index Créer un autre onglet dans SSMS, et ce n'est jamais revenu - il montre simplement "exécuter" et ne revient jamais, alors je ne pense pas que le processus a été abandonné.


0 commentaires

3 Réponses :


-2
votes

La commande est terminée et la connexion attend la commande suivante.

http://blogs.msdn.com/psssql/archive/2008/04/21/how-it-works-Qu-is-a-sleeping-awaitting-command-session.aspx

de l'URL: "Ce problème est aussi vieux que SQL Server. En fait, il remonte à Sybase Days mais continue à tromper et aux administrateurs de puzzle.

Une session avec ce statut de la commande Sleeping / En attente est simplement une connexion cliente sans requête active sur le serveur SQL. Le tableau ci-dessous montre les transitions de la course à des états de sommeil pour une session. "


1 commentaires

Mais je gère le commandement de SSMS et ma session affiche toujours "Exécution" - elle ne semble pas être faite du tout, et elle est allé à "suspendue" de manière trop rapide pour avoir réellement complété. Un lien intéressant, cependant, je n'étais pas au courant de cette connexion.



20
votes
select * 
from sys.dm_exec_requests r
join sys.dm_os_tasks t on r.session_id = t.session_id
where r.session_id = <spid of create index>;
This will show not only the status of the request, but also all the tasks spawned by the request. An online CREATE INDEX may spawn parallel threads and will suspend itself until they're finish. 

3 commentaires

Excellente réponse. Exactement ce que je cherchais. blog.sqlauthority.com / 2009/01/07 / ... m'a montré, et cela m'a montré exactement où se trouvait le problème.


Merci vient d'avoir sauvé mon bacon!


Et si seule la ligne est renvoyée et que son statut est "suspendu"?



3
votes

L'état "suspendu" peut parfois être trompeur. Par exemple, votre requête pourrait être "suspendue" en attendant la fin des E / S du disque. Cela peut être vérifié en exécutant la requête ci-dessous et en vérifiant la colonne WAIT_TYPE. pagesiolatch_ex indique que la requête est bloquée en raison de l'attente d'E / S du disque. Cela ne signifie pas que la requête ne fait pas de progresser.

voir Page Pour plus d'informations sur pagesiolatch_ex

et voici la requête qui renvoie les informations susmentionnées xxx


1 commentaires

Merci pour la requête. Il était en effet utile dans la pointe de la commande qui prend le temps de processeur et IO.