Tiempo agotado. El tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La instrucción se ha terminad

Tengo muchos usuarios en mi sitio web (20000-60000 por día), que es un sitio de descarga para archivos móviles. Tengo acceso remoto a mi servidor (Windows Server 2008-R2).
He recibido "El servidor no está disponible" errores antes, pero ahora veo un error de tiempo de espera de conexión.
No estoy familiarizado con esto: ¿por qué ocurre y cómo puedo solucionarlo?

El error completo está debajo:

Error de servidor en la aplicación '/'. Tiempo agotado. El tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La instrucción se ha terminado. Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

etalles de @Exception: System.Data.SqlClient.SqlException: Tiempo de espera expirado. El tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La instrucción se ha terminado

Error de origen:

Se generó una excepción no controlada durante la ejecución de la solicitud web actual. La información sobre el origen y la ubicación de la excepción se puede identificar utilizando el seguimiento de la pila de excepciones a continuación.

Stack Trace:

[SqlException (0x80131904): Tiempo de espera expirado. El tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La instrucción se ha terminado.
System.Data.SqlClient.SqlConnection.OnError (excepción SqlException, breakConnection booleana) + 404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () + 412
System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) + 1363
System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) + 6387741
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) + 6389442
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, método de cadena, resultado DbAsyncResult) + 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (resultado DbAsyncResult, String methodName, Boolean sendToPipe) + 689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () + 327
NovinMedia.Data.DbObject.RunProcedure (String storeProcName, parámetros IDataParameter [], Int32 & rowsAffected) + 209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Object Session_End, Boolean Online) + 440
NiceFileExplorer.Global.Application_Start (remitente de objetos, EventArgs e) + 163

[HttpException (0x80004005): Tiempo de espera expirado. El tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La instrucción se ha terminado.
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (contexto HttpContext, aplicación HttpApplication) + 4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, contexto HttpContext, manejadores MethodInfo []) + 191
System.Web.HttpApplication.InitSpecial (estado HttpApplicationState, manejadores MethodInfo [], IntPtr appContext, contexto HttpContext) + 352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, contexto HttpContext) + 407
System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) + 375

[HttpException (0x80004005): Tiempo de espera expirado. El tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde. La instrucción se ha terminado.
System.Web.HttpRuntime.FirstRequestInit (contexto HttpContext) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (contexto HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkpReque

EDITAR DESPUÉS DE RESPUESTAS:
myApplication_Start inGlobal.asax es como a continuación:

protected void Application_Start(object sender, EventArgs e)
{
    Application["OnlineUsers"] = 0;

    OnlineUsers.Update_SessionEnd_And_Online(
        DateTime.Now,
        false);

    AddTask("DoStuff", 10);
}

El procedimiento almacenado que se llama es:

ALTER Procedure [dbo].[sp_OnlineUsers_Update_SessionEnd_And_Online]
    @Session_End datetime,
    @Online bit
As
Begin
    Update OnlineUsers
    SET
        [Session_End] = @Session_End,
        [Online] = @Online

End

Tengo dos métodos para obtener usuarios en línea:

utilizandoApplication["OnlineUsers"] = 0; el otro usando la base de datos

Entonces, para el método # 2 reinicio todos los usuarios en línea enApplication_Start. Hay más de 482,751 registros en esa tabla.

Respuestas a la pregunta(24)

Su respuesta a la pregunta