1

Il semble que malgré le fait que nous n'utilisions pas les transactions du tout, nous obtenons une erreur de blocage aléatoire de SQL Azure.DeadLock sur la base de données SQL Azure sans transactions

Existe-t-il une situation transnationale où SQL Azure peut se retrouver dans une impasse?

Il semble que lorsque nous exécutons un lot de requêtes UPDATE, il se comporte comme si le batch était une transaction unique.

Toutes les mises à jour sont par ID et mettent à jour une seule ligne.

+1

Je ne pense pas que l'utilisation de transactions réduira le risque de blocage. Je pense que vous devriez fournir plus de détails. –

+0

Pourquoi les requêtes parallèles sans transaction peuvent-elles se retrouver dans une impasse? –

Répondre

6

Il n'y a rien de tel que "ne pas utiliser de transactions". Il y a toujours une transaction, que vous en démarriez une explicitement ou non. Lisez Tracking down Deadlocks in SQL Database pour savoir comment obtenir le graphe de blocage dans SQL Azure. Connectez à master et exécuter:

SELECT * FROM sys.event_log 
WHERE database_name like '<your db name>' 
AND event_type = 'deadlock'; 

ensuite analyser le graphique de blocage ne comprennent la cause. Vous effectuez probablement une analyse en raison d'index manquants.

+0

Vous pouvez également inclure des verrous dans votre réponse. Qui est ce qui cause réellement les blocages. Les astuces de table (WITH NOLOCK) résoudraient la plupart des problèmes (et READ UNCOMMITED). https://msdn.microsoft.com/en-us/library/ms187373.aspx –

+0

@RicardoC non, les lectures sales ne sont absolument pas la réponse. [Les lectures incorrectes renvoient des données incorrectes] (http://blogs.msdn.com/b/sqlcat/archive/2007/02/01/previously-committed-rows-might-be-missed-if-nolock-hint-is- used.aspx). –

+0

@RicardoC si vous voulez éliminer les interblocages sans comprendre la cause, utilisez l'isolement par image instantanée. Par exemple. read [Deadlocked!] (http://blog.codinghorror.com/deadlocked/) –

2

Lorsque vous exécutez des transactions simultanées (implicites ou explicites), vous rencontrez des blocages. Probablement quand vous avez dit aucune transaction, cela signifie que vos transactions sont implicites.

+0

Comment un lot de mise à jour unique par ID peut-il provoquer un blocage? SQL Azure exécute-t-il un lot de mises à jour en tant que transaction implicite? –