2011-05-03 29 views
5

No estoy seguro de si esto es un error de VB.NET o SQL Server. Pero consigo el error anterior con el seguimiento de pila:Tiempo de espera caducado. El período de tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde

[SqlException (0x80131904): Tiempo de espera expiró. El período de tiempo de espera transcurrido antes de la finalización de la operación o el servidor no está respondiendo.]
System.Data.SqlClient.SqlConnection.OnError (SqlException excepción, Boolean breakConnection) 1.950.890 System.Data.SqlClient.SqlInternalConnection. OnError (SqlException excepción, Boolean breakConnection) 4.846.875 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj) 194
System.Data.SqlClient.TdsParser.Run (runBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM , BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 2392
System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 33 System.Data.SqlClient.SqlDataReader.get_MetaData() 83 System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, runBehavior runBehavior, Cuerda resetOptionsString) +297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, runBehavior runBehavior, Boolean returnStream, async Boolean) 954 System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, método String, resultado DbAsyncResult) 162
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, runBehavior RunBehavior, Boolean returnStream, método String) 32 System.Data.SqlClient.SqlCommand.ExecuteReader ( comportamiento, método de String CommandBehavior) 141
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior comportamiento) 12
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader (CommandBehavior comportamiento) +10
System.Data.Common.DbDataAdapter.FillInternal (Datos Establecer conjunto de datos, DataTable [] tablas de datos, Int32 startRecord, Int32 maxRecords, Cadena srcTable, comando IDbCommand, comportamiento CommandBehavior) 130
System.Data.Common.DbDataAdapter.Fill (conjunto de datos conjunto de datos, Int32 startRecord, Int32 maxRecords, cadena srcTable, comando IDbCommand, CommandBehavior comportamiento) 287
System.Data.Common.DbDataAdapter.Fill (conjunto de datos dataSet) 94
GlobalFunctions.GlobalF.GetComplaintTrendingList6 (DateTime primermes, DateTime lastMonth, Int32 rowLeve l) 489
ASP.website_complaints_complainttrendinglist6_aspx.Main() en e: \ inetpub \ amdmetrics-d.web.abbott.com \ wwwroot \ sitio web \ \ Quejas ComplaintTrendingList6.aspx: 94 ASP.website_complaints_complainttrendinglist6_aspx.Load (Objeto remitente, EventArgs e) en e: \ inetpub \ amdmetrics-d.web.abbott.com \ wwwroot \ sitio web \ \ Quejas ComplaintTrendingList6.aspx: 60 System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, o de objetos, objetos t, EventArgs e) 14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback (objeto remitente, EventArgs e) 35
System.Web.UI.Control.OnLoad (EventArgs e) + 99
System.Web.UI.Control.LoadRecursive() 50 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 627

Este es el Microsoft .NET Framework Versión: 2.0.50727.3620; ASP.NET Versión: 2.0.50727.3618 y SQL Server 2008. La línea lo marca causando este error dice:

1: PrintMessageGrid.DataSource = GlobalFunctions.GlobalF.GetComplaintTrendingList6(FirstMonthDate, LastMonthDate, TheLevel) 

Aunque puedo ejecutar este procedimiento almacenado en el Analizador de consultas y se devuelve en 8 segundos. ¿Cuál podría ser la causa y la solución?

Aquí hay más detalles en donde declaro esta función:

Public Shared Function GetComplaintTrendingList6(ByVal FirstMonth As DateTime, ByVal LastMonth As DateTime, ByVal rowLevel As Integer) As DataSet 
    Dim DSPageData As New System.Data.DataSet 
    Dim param(2) As SqlClient.SqlParameter 

    param(0) = New SqlParameter("@FirstMonthDate", SqlDbType.DateTime) 
    param(0).Value = FirstMonth 
    param(1) = New SqlParameter("@LastMonthDate", SqlDbType.DateTime) 
    param(1).Value = LastMonth 
    param(2) = New SqlParameter("@TheLevel", SqlDbType.Int) 
    param(2).Value = rowLevel 

    ''# A Using block will ensure the .Dispose() method is called for these variables, even if an exception is thrown 
    ''# This is IMPORTANT - not disposing your connections properly can result in an unrespsonsive database 
    Using conn As New SQLConnection(ConfigurationSettings.AppSettings("AMDMetricsDevConnectionString")), _ 
    cmd As New SQLCommand("ComplaintTrendingList6", conn), _ 
    da As New SQLDataAdapter(cmd) 
     cmd.CommandType = CommandType.StoredProcedure 
     cmd.Parameters.AddRange(param) 

     da.Fill(DSPageData) 
    End Using 

    Return DSPageData 
End Function 

Lo extraño es que si hago este pequeño cambio en mi procedimiento almacenado, que pasa, pero no me da los datos que yo quiero: no hay error, pero esta versión no me da lo que quiero:

SELECT E.PRODUCT_GROUP, a.QXP_SHORT_DESC, COUNT(DISTINCT A.QXP_EXCEPTION_NO), A.QXP_REPORT_DATE, DATEADD(M, DATEDIFF(M, 0, A.QXP_REPORT_DATE), 0) AS STARTDATE 
FROM ALL_COMPLAINTS A 
LEFT OUTER JOIN SMARTSOLVE.V_QXP_ISSUE_REF D ON A.QXP_ID = D.IRF_QXP_ID 
INNER JOIN CT_ProductFailures b ON b.old_modes = a.qxp_short_desc 
LEFT OUTER JOIN [MANUAL].PRODUCTS E ON A.EPA_PRD_CODE = E.LIST_NUMBER 
LEFT JOIN SMARTSOLVE.V_CXP_CUSTOMER_PXP C ON A.QXP_ID = C.QXP_ID 
INNER JOIN @SelectedLevels F ON A.[LEVEL] = F.LevelId 
WHERE --[LEVEL] > 0 AND 
(A.QXP_SHORT_DESC <> 'Design Control') 
and A.QXP_REPORT_DATE >= @OneYearAgo AND A.QXP_REPORT_DATE <= @LastMonthDate 
AND (C.QXP_EXCEPTION_TYPE <> 'Non-Diagnostic' OR C.QXP_EXCEPTION_TYPE IS NULL) 
GROUP BY E.PRODUCT_GROUP, A.QXP_REPORT_DATE, A.QXP_SHORT_DESC 

causa de errores procedimiento almacenado:

INSERT #PVAL_NUM 
SELECT E.PRODUCT_GROUP, b.new_modes 'QXP_SHORT_DESC', COUNT(DISTINCT A.QXP_EXCEPTION_NO), A.QXP_REPORT_DATE, DATEADD(M, DATEDIFF(M, 0, A.QXP_REPORT_DATE), 0) AS STARTDATE 
FROM ALL_COMPLAINTS A 
LEFT OUTER JOIN SMARTSOLVE.V_QXP_ISSUE_REF D ON A.QXP_ID = D.IRF_QXP_ID 
INNER JOIN CT_ProductFailures b ON b.old_modes = a.qxp_short_desc 
LEFT OUTER JOIN [MANUAL].PRODUCTS E ON A.EPA_PRD_CODE = E.LIST_NUMBER 
LEFT JOIN SMARTSOLVE.V_CXP_CUSTOMER_PXP C ON A.QXP_ID = C.QXP_ID 
INNER JOIN @SelectedLevels F ON A.[LEVEL] = F.LevelId 
WHERE --[LEVEL] > 0 AND 
(A.QXP_SHORT_DESC <> 'Design Control') 
and A.QXP_REPORT_DATE >= @OneYearAgo AND A.QXP_REPORT_DATE <= @LastMonthDate 
AND (C.QXP_EXCEPTION_TYPE <> 'Non-Diagnostic' OR C.QXP_EXCEPTION_TYPE IS NULL) 
GROUP BY E.PRODUCT_GROUP, A.QXP_REPORT_DATE, b.new_modes 

Respuesta

3

Lo que se obtiene con el Analizador de consultas (o SSMS, en estos días) y lo que se pone de aplicación pueden ser cosas muy diferentes, sobre todo debido a los parámetros oliendo.

sugiero leer this article por Erland Sommarskog por unos detalles.

4

Creo que eso significa que la operación de la base de datos se tardaba mucho y se rindió.

trate de añadir un tiempo de espera de Connect en el web.config

<add key="DBConnection" value="server=LocalHost;uid=sa;pwd=;database=DataBaseName;Connect Timeout=200; pooling='true'; Max Pool Size=200"/> 
+0

Rob, si este proceso almacenado solo tomó 8 segundos para ejecutarse en QA, ¿cree que se agotaría el tiempo de espera con la configuración de tiempo de espera predeterminada? – salvationishere

5

Es necesario aumentar el tiempo de espera de comandos en el comando de selección del adaptador de datos.

A continuación se muestra el código para aumentar el tiempo de espera de comandos para dataadapter.

adapter.SelectCommand.CommandTimeout = 0; 

tiempo de espera de conexión de SQL es diferente de tiempo de espera establecido para el comando que se ejecuta.

Se define de la siguiente manera. De MSDN

Obtiene el tiempo de espera al intentar establecer una conexión antes de de terminar el intento y generar un error.

sobre cómo establecer el tiempo de espera de la conexión ..de MSDN

Puede establecer la cantidad de tiempo que espera una conexión a tiempo de espera mediante el uso de la ConnectTimeout o palabras clave de tiempo de espera de conexión en el cadena de conexión. Un valor de 0 indica que no hay límite, y se debe evitar en un ConnectionString porque un intento de conexión espera indefinidamente.

El valor predeterminado para todos los tiempos de espera es 30 segundos.

-1

"operación ..database tomó demasiado tiempo y se dio por vencido."

Esto es correcto. Esto sucede cuando hay un conflicto con su conexión al servidor.

Para resolver temporalmente esta ..

"Reparación de su conexión LAN"

Usted puede hacer esto haciendo clic derecho en su conexión y hacer clic en "reparar"

Para resolver definitivamente este ..

No debe haber una combinación de direcciones IP estáticas y dinámicas en su grupo de trabajo. Si desea establecer un grupo estático, no incluya conexiones dinámicas, viceversa.

Después de eso, ya no debería haber un error que muestre "Tiempo de espera caducado".

¡salud!

Cuestiones relacionadas