SQL Server - provider: Proveedor de TCP, error: 0 - Se ha forzado la interrupción de una conexión existente por e

   
Vista:
Imágen de perfil de Alberto

provider: Proveedor de TCP, error: 0 - Se ha forzado la interrupción de una conexión existente por e

Publicado por Alberto (1 intervención) el 25/05/2016 09:01:54
Muy buenos días,

Antes de nada muchas gracias por dedicarle tiempo a mi consulta. Veréis tengo una aplicación echa en ASP.NET con código c# en un servidor Windows Server 2008 y una base de datos SQL Server , dicha aplicación es usada por una media de 5 personas y no sé porque me deja conexiones en base de datos en estado 'sleeping', por ello tuve que crear una tarea de trabajo programada que se ejecuta cada 4 minutos con el siguiente codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE @v_spid INT
DECLARE c_Users CURSOR
   FAST_FORWARD FOR
   SELECT SPID
   FROM master..sysprocesses (NOLOCK)
where status = 'sleeping'
and program_name like '%Net SqlClient Data Provider%'
 
OPEN c_Users
FETCH NEXT FROM c_Users INTO @v_spid
WHILE (@@FETCH_STATUS=0)
BEGIN
  PRINT 'KILLing '+CONVERT(VARCHAR,@v_spid)+'...'
  EXEC('KILL '+@v_spid)
  FETCH NEXT FROM c_Users INTO @v_spid
END
 
CLOSE c_Users
DEALLOCATE c_Users
Pues bien desde que implemente dicho trabajo programado me sucede que en muchas consultas me da el siguiente error:
provider: Proveedor de TCP, error: 0 - Se ha forzado la interrupción de una conexión existente por el host remoto.
Coincide cuando se lanza el trabajo. ¿Alguien me puede arrojar algo de luz en este tema?.
Un saludo y muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

provider: Proveedor de TCP, error: 0 - Se ha forzado la interrupción de una conexión existente por e

Publicado por Isaias (3186 intervenciones) el 25/05/2016 20:43:25
Hay SPID's que son del sistema y no deben ser tocados, le paso el codigo que debe funcionar, elimina aquellas conexiones que por mas de 24 horas, no han tenido actividad.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE @spid INT
DECLARE @SQLString NVARCHAR(50)
 
USE master
WHILE EXISTS(SELECT spid
			FROM master..sysprocesses
			WHERE status = 'sleeping' AND
			last_batch <= DATEADD(DD, -1, GETDATE())
			AND spid > 50 and spid <> @@spid)  -- Los spids del 1 al 50, son del sistema
	BEGIN
		SELECT TOP 1 @spid = spid FROM master..sysprocesses
			WHERE status = 'sleeping' AND
			last_batch <= DATEADD(DD, -1, GETDATE())
			AND spid > 50 and spid <> @@spid
		SET @SQLString = N'KILL ' + CONVERT(VARCHAR(10), @spid)
		EXECUTE sp_executesql @SQLString
		CONTINUE
	END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar