web-dev-qa-db-fra.com

Signification du statut de la base de données du serveur SQL exécutable, en veille, suspendu, en cours d'exécution et d'arrière-plan

Je ne parviens pas à obtenir la signification du statut de session DB. Je l'ai recherché pour quelques références, mais je n'ai obtenu aucune aide. Quelqu'un peut-il expliquer à ces statuts (exécutable, endormi, suspendu, en cours d'exécution et en arrière-plan) ce que cela signifie réellement, cela m'aiderait beaucoup. Merci d'avance.

8
Manish Kumar

Les valeurs d'état sont documentées avec sp_who :

Les valeurs possibles sont:

Dormant - SQL Server réinitialise la session.

En cours d'exécution - La session exécute un ou plusieurs lots. Lorsque plusieurs jeux de résultats actifs (MARS) sont activés, une session peut exécuter plusieurs lots. Pour plus d'informations, voir Utilisation de plusieurs jeux de résultats actifs (MARS).

Contexte - La session exécute une tâche en arrière-plan, telle que la détection de blocage.

Rollback - La session a un rollback de transaction dans le processus.

En attente - La session attend qu'un thread de travail soit disponible.

Runnable - La tâche de la session est dans la file d'attente runnable d'un planificateur en attendant d'obtenir un quantum de temps.

Spinloop - La tâche de la session attend la libération d'un spinlock.

Suspendu - La session attend la fin d'un événement, tel que les E/S.

13
Dan Guzman

Voici la liste de cela dans votre question avec une réponse facile .. Answer

Certains des états les plus vus des SPID dans SQL Server et que signifient-ils:

FONCTIONNEMENT:

Ce statut signifie que la session exécute un ou plusieurs lots. Lorsque plusieurs jeux de résultats actifs (MARS) sont activés, une session peut exécuter plusieurs lots. En réalité, cela signifie que le client connecté à SQL Server à l'aide de cette session a déjà soumis une requête à traiter par SQL Server et que SQL Server traite actuellement la requête. La requête peut se situer n'importe où entre la génération d'une arborescence d'analyseur et l'exécution d'une jointure pour trier les données ... et elle consomme actuellement les cycles CPU (processeur).

SUSPENDU:

Cela signifie que la demande n'est actuellement pas active car elle attend une ressource. La ressource peut être une E/S pour lire une page, UNE ATTENTE peut être une communication sur le réseau, ou elle attend un verrou ou un verrou. Il deviendra actif une fois la tâche qu'il attend terminée. Par exemple, si la requête a publié une demande d'E/S pour lire les données d'une table complète tblStudents, cette tâche sera suspendue jusqu'à ce que les E/S soient terminées. Une fois les E/S terminées (les données de la table tblStudents sont disponibles dans la mémoire), la requête se déplacera dans la file d'attente RUNNABLE.

EXÉCUTABLE:

Le SPID est dans la file d'attente exécutable d'un planificateur et attend qu'un quantum s'exécute sur le planificateur. Cela signifie que les requêtes ont un thread de travail affecté mais qu'elles n'obtiennent pas de temps CPU.

La file d'attente RUNNABLE peut être comparée à une analogie d'épicerie où il existe plusieurs lignes de paiement. Le greffier du registre est la CPU. Un seul client vérifie par exemple "RUNNING" à n'importe quel registre donné. Le temps passé dans la ligne de paiement représente la pression du processeur. Donc, ce SPID attend que le client qui est en cours d'exécution (avec le greffier de registre) sorte afin qu'il puisse démarrer RUNNING. Vous pouvez utiliser la requête SELECT wait_type, wait_tasks_count, signal_wait_time_ms FROM sys.dm_os_wait_stats ORDER BY signal_wait_time_ms DESC pour connaître la différence entre l'heure à laquelle le thread en attente a été signalé et le moment où il a commencé à s'exécuter. Cette différence est le temps passé dans la file d'attente RUNNABLE. Certaines des attentes en haut de la liste peuvent être ignorées en toute sécurité.

EN ATTENTE:

La demande attend qu'un travailleur la récupère. Cela signifie que la demande est prête à être exécutée mais qu'aucun thread de travail n'est disponible pour exécuter les demandes dans le processeur. Cela ne signifie pas que vous devez augmenter "Max. Worker threads ", vous devez vérifier ce que font les threads en cours d'exécution et pourquoi ils ne sont pas renvoyés. J'ai personnellement vu plus de SPID avec le statut PENDING sur des problèmes qui se sont retrouvés dans" Non-yielding Scheduler "et" Scheduler deadlock ".

CONTEXTE:

La demande est un thread d'arrière-plan tel que Resource Monitor ou Deadlock Monitor.

SOMMEIL:

Il n'y a aucun travail à faire.

9
CR241