sql >> Base de Datos >  >> RDS >> Sqlserver

La declaración compuesta de t-SQL provoca el interbloqueo, ¿alguna idea de por qué?

Necesitas tener más candados o menos.

La respuesta más fácil es ir a NOLOCK (mejor rendimiento) o TABLOCKX (coherencia sin tener que pensar).

Si no puede usar with (nolock) debido a los requisitos de consistencia, puede agregar with (tablockx) .Esto significará efectivamente que solo un subproceso puede ejecutar declaraciones similares a la vez; no habrá concurrencia.

La alternativa es analizar sus requisitos con mucho más detalle, lo que no se puede hacer sin entender por qué está actualizando la tabla, para qué son los datos, etc.

Por ejemplo, ¿realmente es necesario que esta declaración esté en la transacción? Huele a limpieza:

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

Si lo elimina de la transacción y lo coloca en un lote separado, es posible que los problemas desaparezcan.