Timeout expirou. O período de tempo limite decorrido antes da conclusão da operação ou o servidor não está respondendo. A instrução foi encerrad

Tenho muitos usuários no meu site (20000-60000 por dia), que é um site de download de arquivos para celular. Eu tenho acesso remoto ao meu servidor (Windows Server 2008-R2).
Eu recebi "O servidor não está disponível"rros antes, mas agora estou vendo um erro de tempo limite de conexã
Não estou familiarizado com isso - por que isso ocorre e como posso corrigi-lo?

O erro completo está abaixo:

Erro de Servidor na '/' Aplicação. Tempo limite expirado. O período de tempo limite decorrido antes da conclusão da operação ou o servidor não está respondendo. A instrução foi encerrada. Descrição: ocorreu uma exceção não tratada durante a execução da solicitação da web atual. Revise o rastreamento de pilha para obter mais informações sobre o erro e onde ele se originou no códig

Detalhes da exceção: System.Data.SqlClient.SqlException: o tempo limite expirou. O período de tempo limite decorrido antes da conclusão da operação ou o servidor não está respondendo. A instrução foi encerrada

Erro de origem:

Uma exceção não tratada foi gerada durante a execução da solicitação da web atual. Informações sobre a origem e o local da exceção podem ser identificadas usando o rastreamento da pilha de exceções abaix

Stack Trace:

[SqlException (0x80131904): o tempo limite expirou. O período de tempo limite decorrido antes da conclusão da operação ou o servidor não está respondendo. A instrução foi encerrada.
System.Data.SqlClient.SqlConnection.OnError (exceção SqlException, boolean breakConnection) + 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 (ds SqlDataReader, RunBehavior runBehavior, String resetOptionsString) + 6387741
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, assíncrono booleano) + 6389442
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, método String, método DbAsyncResult) + 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (resultado DbAsyncResult, String methodName, Boolean sendToPipe) + 689
System.Data.SqlClient.SqlCommand.ExecuteNonQuery () + 327
NovinMedia.Data.DbObject.RunProcedure (Parâmetros string armazenadosProcName, IDataParameter [], Int32 e linesAffected) + 209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Objeto Session_End, Boolean Online) + 440
NiceFileExplorer.Global.Application_Start (remetente do objeto, EventArgs e) + 163

[HttpException (0x80004005): o tempo limite expirou. O período de tempo limite decorrido antes da conclusão da operação ou o servidor não está respondendo. A instrução foi encerrada.
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (contexto HttpContext, aplicativo HttpApplication) + 4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, contexto HttpContext, manipuladores MethodInfo []) + 191
System.Web.HttpApplication.InitSpecial (estado HttpApplicationState, manipuladores 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): o tempo limite expirou. O período de tempo limite decorrido antes da conclusão da operação ou o servidor não está respondendo. A instrução foi encerrada.
System.Web.HttpRuntime.FirstRequestInit (contexto HttpContext) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (contexto HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest wrtt, 49

EDIT APÓS RESPOSTAS:
meuApplication_Start dentroGlobal.asax é como abaixo:

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

    OnlineUsers.Update_SessionEnd_And_Online(
        DateTime.Now,
        false);

    AddTask("DoStuff", 10);
}

O procedimento armazenado chamado é:

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

Tenho dois métodos para obter usuários online:

usingApplication["OnlineUsers"] = 0; o outro usando o banco de dados

Então, para o método 2, redefino todos os OnlineUsers emApplication_Start. Existem mais de 482.751 registros nessa tabel

questionAnswers(12)

yourAnswerToTheQuestion