2009-09-23 11 views
3

Je devrais probablement pouvoir trouver une réponse à ceci mais mon Google-fu est faible aujourd'hui. Lorsque j'ai la même procédure stockée appelée plusieurs fois par une application Web, les appels sont-ils en file d'attente ou s'exécutent-ils indépendamment?Procédures stockées SQL Server: font-elles la queue?

Répondre

7

Dépend du isolation level de ce que fait la procédure stockée. Si le niveau d'isolation est défini sur READ UNCOMMITTED pour toutes les transactions du SP, il n'y a pas de protection et plusieurs threads peuvent effectuer la même transaction en même temps. Si le niveau d'isolation est supérieur, d'autres threads peuvent être verrouillés hors des ressources traitées par votre SP jusqu'à la fin de la transaction, mettant ainsi en file d'attente les autres threads du SP.

Il n'y a pas explicite file d'attente de procédure stockée cependant. Tant que votre base de données dispose de connexions libres et de ressources disponibles, elle génèrera des threads pour satisfaire les requêtes.

+0

Vraiment le niveau d'isolement des transactions individuelles et des instructions DML dans la procédure stockée, mais autrement précis. –

+0

Oui, je pourrais probablement le rendre plus clair. – womp

+0

Modifié pour plus de clarté sur le niveau de transaction par rapport au niveau SP. – womp

0

Ils fonctionneraient indépendamment. Si elles se mettaient en file d'attente, cela causerait des problèmes d'évolutivité massifs si vous aviez un système occupé qui utilisait beaucoup de procédures stockées. Cela suppose, bien sûr, que les sprocs ne verrouillent pas les ressources d'une manière qui obligerait un appel à attendre que l'autre finisse.

5

Les deux. Chaque invocation d'une procédure stockée (plus précisément chaque requête envoyée par le client) crée une tâche en SQL, visible au sys.dm_os_tasks. Les tâches sont assignées aux planificateurs (sys.dm_os_schedulers) et attendent qu'un ouvrier (sys.dm_os_workers) soit disponible pour les exécuter. Si le système est très occupé, les tâches seront mises en file d'attente, ce qui est visible dans la colonne work_queue_count de sys.dm_os_schedulers. Pour plus de détails, voir Thread and Task Architecture.

Dans des opérations normales, l'effet de mise en file d'attente n'est pas visible car le système récupère immé- diatement les tâches soumises et commence à les exécuter.

Les clients peuvent soumettre une seule demande par connexion (MARS est l'exception, pas la règle). Du point de vue du client, il doit donc mettre en file d'attente les requêtes lors de l'utilisation d'une connexion, mais cela est caché dans le flux de contrôle du programme (il doit attendre le retour d'une requête avant d'en envoyer une nouvelle).

+0

Le lien sur Thread et Task Architecture est exactement le genre de chose que je cherchais. Merci! – Valkyrie

Questions connexes