Timeout expired.

15/03/2006 - 02:13 por JPablo | Informe spam
Que tal Grupo,

Estoy haciendo pruebas de estres a una página de ASP.NET y estoy utilizando
la herramienta Application Center Test que viene con el VS.NET 2003.

La prueba consiste en ejecutar una página que manda llamar a un Stored
Procedure de SQL Server 2000 que hace una búsqueda en varias tablas, el
Stored Procedure esta construido de la siguiente manera:

CREATE PROCEDURE dbo.spSelPersonaExpediente
@PersonaID INT = NULL,
@RFC VARCHAR(15) = NULL,
@RFCHOMOCLAVE VARCHAR(18) = NULL,
@RazonSocial VARCHAR(60) = NULL
AS
SET NOCOUNT ON
BEGIN

declare @PAIS INT
declare @PERSONALIDADMORAL INT
if @RazonSocial is not null
BEGIN
set @PERSONALIDADMORAL= 1
set @PAIS = 1
END
else
BEGIN
set @PERSONALIDADMORAL = NULL;
set @PAIS = -1
END
DECLARE @Res INT

SET @Res = 0

SELECT P.PersonaID,
P.PersonalidadJuridicaID,
PJ.Nombre NombrePersonalidadJuridica,
P.NacionalidadID,
P.PaisNacimientoID,
PA.Nombre NombrePaisNacimiento,
P.EstadoNacimientoID,
P.PoblacionNacimiento,
M.MunicipioID MunicipioNacimientoID,
M.Nombre NombreMunicipioNacimiento,
P.RFC,
P.RFCHomoclave,
CASE P.PersonalidadJuridicaID WHEN 1 THEN '' ELSE PF.PrimerNombre END
PrimerNombre,
CASE P.PersonalidadJuridicaID WHEN 1 THEN '' ELSE PF.SegundoNombre END
SegundoNombre,
CASE P.PersonalidadJuridicaID WHEN 1 THEN '' ELSE PF.ApellidoPaterno END
ApellidoPaterno,
CASE P.PersonalidadJuridicaID WHEN 1 THEN '' ELSE PF.ApellidoMaterno END
ApellidoMaterno,
CASE P.PersonalidadJuridicaID WHEN 0 THEN '' ELSE PM.RazonSocial END
RazonSocial,
CASE P.PersonalidadJuridicaID WHEN 0 THEN PF.PrimerNombre + ' ' +
PF.SegundoNombre + ' ' + PF.ApellidoPaterno + ' ' + PF.ApellidoMaterno ELSE
PM.RazonSocial END Nombre_RazonSocial,
P.GiroID,
P.AR,
P.PoliticamenteExpuesto,
P.FechaAlta,
P.StatusID,
P.FechaUltimaModificacion
FROM Persona P WITH (NOLOCK) Inner Join PersonalidadJuridica PJ WITH
(NOLOCK) On P.PersonalidadJuridicaID = PJ.PersonalidadJuridicaID
Inner Join Pais PA WITH (NOLOCK) On P.PaisNacimientoID = PA.PaisID
Inner Join Municipio M WITH (NOLOCK) On P.MunicipioNacimientoID =
M.MunicipioID
Left Join PersonaFisica PF WITH (NOLOCK) On P.PersonaID = PF.PersonaID
Left Join PersonaMoral PM WITH (NOLOCK) On P.PersonaID = PM.PersonaID
WHERE (P.PersonaID = @PersonaID OR @PersonaID IS NULL)
AND (P.RFC = @RFC OR @RFC IS NULL)
AND (P.RFCHomoclave = @RFCHOMOCLAVE OR @RFCHOMOCLAVE IS NULL)
AND (PM.RazonSocial like '%' + @RazonSocial + '%' OR @RazonSocial IS NULL)
AND P.NAcionalidadID not in (@PAIS)
AND P.PersonalidadJuridicaId = COALESCE(@PERSONALIDADMORAL,
P.PersonalidadJuridicaId)
AND P.StatusID = 1


/* Regresar el valor @@ERROR */
SET @Res = @@ERROR
RETURN @Res
END

La página ejecuta el sp de la siguiente manera:
spSelPersonaExpediente @RFC='AIWA630408', @RFCHOMOCLAVE='6W7'

Las tablas que intervienen en los JOINS, tienen los Indices adecuados.
Y hasta aqui todo va bien.

Cuando ejecuto el ACT simulando 15 Browsers funciona bien la página de
ASP.NET, sin embargo cuando ejecuto las pruebas con 20 Browser, me generá
errores:

Tipo Excepción: System.Data.SqlClient.SqlException
Errors: System.Data.SqlClient.SqlErrorCollection
Class: 10
LineNumber: 0
Message: Timeout expired. The timeout period elapsed prior to completion of
the operation or the server is not responding.
Number: -2
Procedure: ConnectionRead (recv()).
Server:
State: 0
Source: .Net SqlClient Data Provider
TargetSite: NULL
HelpLink: NULL

A que se deberá Grupo ?? Hay alguna recomendación de ustedes que deba de
revisar ??

De antemano Gracias
Salu2
JP
 

Leer las respuestas

#1 Maxi
15/03/2006 - 12:55 | Informe spam
Hola, que timeout le has dado al adonet? fijate eso. De todas maneras revisa
el plan de ejecucion de esta consulta y fijate como usa los indices


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"JPablo" escribió en el mensaje
news:

Que tal Grupo,

Estoy haciendo pruebas de estres a una página de ASP.NET y estoy
utilizando
la herramienta Application Center Test que viene con el VS.NET 2003.

La prueba consiste en ejecutar una página que manda llamar a un Stored
Procedure de SQL Server 2000 que hace una búsqueda en varias tablas, el
Stored Procedure esta construido de la siguiente manera:

CREATE PROCEDURE dbo.spSelPersonaExpediente
@PersonaID INT = NULL,
@RFC VARCHAR(15) = NULL,
@RFCHOMOCLAVE VARCHAR(18) = NULL,
@RazonSocial VARCHAR(60) = NULL
AS
SET NOCOUNT ON
BEGIN

declare @PAIS INT
declare @PERSONALIDADMORAL INT
if @RazonSocial is not null
BEGIN
set @PERSONALIDADMORAL= 1
set @PAIS = 1
END
else
BEGIN
set @PERSONALIDADMORAL = NULL;
set @PAIS = -1
END
DECLARE @Res INT

SET @Res = 0

SELECT P.PersonaID,
P.PersonalidadJuridicaID,
PJ.Nombre NombrePersonalidadJuridica,
P.NacionalidadID,
P.PaisNacimientoID,
PA.Nombre NombrePaisNacimiento,
P.EstadoNacimientoID,
P.PoblacionNacimiento,
M.MunicipioID MunicipioNacimientoID,
M.Nombre NombreMunicipioNacimiento,
P.RFC,
P.RFCHomoclave,
CASE P.PersonalidadJuridicaID WHEN 1 THEN '' ELSE PF.PrimerNombre END
PrimerNombre,
CASE P.PersonalidadJuridicaID WHEN 1 THEN '' ELSE PF.SegundoNombre END
SegundoNombre,
CASE P.PersonalidadJuridicaID WHEN 1 THEN '' ELSE PF.ApellidoPaterno END
ApellidoPaterno,
CASE P.PersonalidadJuridicaID WHEN 1 THEN '' ELSE PF.ApellidoMaterno END
ApellidoMaterno,
CASE P.PersonalidadJuridicaID WHEN 0 THEN '' ELSE PM.RazonSocial END
RazonSocial,
CASE P.PersonalidadJuridicaID WHEN 0 THEN PF.PrimerNombre + ' ' +
PF.SegundoNombre + ' ' + PF.ApellidoPaterno + ' ' + PF.ApellidoMaterno
ELSE
PM.RazonSocial END Nombre_RazonSocial,
P.GiroID,
P.AR,
P.PoliticamenteExpuesto,
P.FechaAlta,
P.StatusID,
P.FechaUltimaModificacion
FROM Persona P WITH (NOLOCK) Inner Join PersonalidadJuridica PJ WITH
(NOLOCK) On P.PersonalidadJuridicaID = PJ.PersonalidadJuridicaID
Inner Join Pais PA WITH (NOLOCK) On P.PaisNacimientoID = PA.PaisID
Inner Join Municipio M WITH (NOLOCK) On P.MunicipioNacimientoID > M.MunicipioID
Left Join PersonaFisica PF WITH (NOLOCK) On P.PersonaID = PF.PersonaID
Left Join PersonaMoral PM WITH (NOLOCK) On P.PersonaID = PM.PersonaID
WHERE (P.PersonaID = @PersonaID OR @PersonaID IS NULL)
AND (P.RFC = @RFC OR @RFC IS NULL)
AND (P.RFCHomoclave = @RFCHOMOCLAVE OR @RFCHOMOCLAVE IS NULL)
AND (PM.RazonSocial like '%' + @RazonSocial + '%' OR @RazonSocial IS NULL)
AND P.NAcionalidadID not in (@PAIS)
AND P.PersonalidadJuridicaId = COALESCE(@PERSONALIDADMORAL,
P.PersonalidadJuridicaId)
AND P.StatusID = 1


/* Regresar el valor @@ERROR */
SET @Res = @@ERROR
RETURN @Res
END

La página ejecuta el sp de la siguiente manera:
spSelPersonaExpediente @RFC='AIWA630408', @RFCHOMOCLAVE='6W7'

Las tablas que intervienen en los JOINS, tienen los Indices adecuados.
Y hasta aqui todo va bien.

Cuando ejecuto el ACT simulando 15 Browsers funciona bien la página de
ASP.NET, sin embargo cuando ejecuto las pruebas con 20 Browser, me generá
errores:

Tipo Excepción: System.Data.SqlClient.SqlException
Errors: System.Data.SqlClient.SqlErrorCollection
Class: 10
LineNumber: 0
Message: Timeout expired. The timeout period elapsed prior to completion
of
the operation or the server is not responding.
Number: -2
Procedure: ConnectionRead (recv()).
Server:
State: 0
Source: .Net SqlClient Data Provider
TargetSite: NULL
HelpLink: NULL

A que se deberá Grupo ?? Hay alguna recomendación de ustedes que deba de
revisar ??

De antemano Gracias
Salu2
JP

Preguntas similares