2010-08-30 3 views
2

Je cherche un moyen d'expliquer un problème d'interblocage. Je pense que je sais ce qui le cause, mais je ne suis pas sûr des événements exacts.Les instructions SQL suivantes seraient-elles la cause d'un blocage?

Nous avons une vue longue durée (plusieurs secondes). Nous mettons à jour l'une des tables utilisées dans cette vue. Les mises à jour peuvent également prendre plusieurs secondes. Les instructions de mise à jour qui s'exécutent lorsque l'erreur de blocage est lancée se joignent à la vue. Par exemple:

UPDATE t1 SET 
    Field1 = 'someValue' 
FROM Table1 t1 
JOIN TheView v ON v.TableId = t1.TableId 
WHERE v.Condition = 'TheCondition' 

La déclaration qui semble se fermer en raison de l'impasse est comme:

SELECT * FROM TheView 

Lorsque la vue est définie comme:

CREATE VIEW TheView AS 
    SELECT * 
    FROM Table1 t1 
    JOIN Table2 t2 ON t2.foo = t1.foo 

Je suis assez sûr que le blocage se produit parce que la vue et l'instruction de mise à jour dépendent de Table1. Ce scénario est-il possible?

Merci

Répondre

1

Avez-vous essayé d'utiliser SQL Profiler? Le profileur vous dira exactement quelles sont les instructions impliquées dans un blocage et inclura les ressources que chaque processus a verrouillées que l'autre processus a besoin, etc.

Questions connexes