Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

L'istruzione composta t-SQL provoca il deadlock, hai idea del perché?

O devi tenere più lucchetti o meno.

La risposta più semplice è andare su NOLOCK (migliore prestazione) o TABLOCKX (coerenza senza dover pensare).

Se non puoi usare with (nolock) a causa dei requisiti di coerenza, puoi aggiungere with (tablockx) .Ciò significherà effettivamente che solo un thread alla volta può eseguire istruzioni simili:non ci sarà concorrenza.

L'alternativa è analizzare le tue esigenze in modo molto più dettagliato, cosa che non può essere fatta senza capire perché stai aggiornando la tabella, a cosa servono i dati, ecc.

Ad esempio, questa affermazione deve davvero essere inclusa nella transazione? Odora di pulizie:

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

Se lo togli dalla transazione e lo inserisci in un batch separato, potresti scoprire che i problemi scompaiono.