Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

L'instruction composée t-SQL provoque le blocage, une idée pourquoi?

Vous devez soit détenir plus de verrous, soit moins.

La réponse la plus simple est d'aller soit NOLOCK (meilleures performances) ou TABLOCKX (cohérence sans avoir à réfléchir).

Si vous ne pouvez pas utiliser with (nolock) en raison des exigences de cohérence, vous pouvez ajouter with (tablockx) .Cela signifiera effectivement qu'un seul thread peut exécuter des instructions similaires à la fois - il n'y aura pas de simultanéité.

L'alternative est d'analyser vos besoins de manière beaucoup plus détaillée, ce qui ne peut être fait sans comprendre pourquoi vous mettez à jour le tableau, à quoi servent les données, etc.

Par exemple, cette instruction doit-elle vraiment figurer dans la transaction ? Ça sent le ménage :

  DELETE FROM [dbo].[t_Log_2] 
  WHERE [idtm]<'2011-03-12 08:41:57';

Si vous retirez cela de la transaction et que vous le mettez dans un lot séparé, vous constaterez peut-être que les problèmes disparaissent.