Eu 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).
Já recebi erros "O servidor não está disponível" antes, mas agora estou vendo um erro de tempo limite de conexão.
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ódigo.
Detalhes da exceção: System.Data.SqlClient.SqlException: 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.
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 abaixo.
Rastreio de pilha:
[SqlException (0x80131904): 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 finalizada.]
System.Data.SqlClient.SqlConnection.OnError (exceção SqlException, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () +412
System.Data.SqlClient.TdsParser.Run (RunBehavior , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader2014)
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, runBehavior runBehavior, booleano returnStream, assíncrono booleana) 6389442
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, runBehavior runBehavior, booleano returnStream, método de sequência, 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, , Int32 & linesAffected) +209
DataLayer.OnlineUsers.Update_SessionEnd_And_Online (Object Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start (remetente do objeto, EventArgs e) +163[HttpException (0x80004005): 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.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext contexto, HttpApplication app) 4052053
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, HttpContext contexto, MethodInfo [] manipuladores) 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.Host[HttpException (0x80004005): 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.]
System.Web.HttpRuntime.FirstRequestInit (contexto HttpContext) +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (contexto HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7Worker)
EDITAR DEPOIS DAS RESPOSTAS:
meu Application_Start
dentro Global.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 que está sendo 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
Eu tenho dois métodos para obter usuários online:
- usando
Application["OnlineUsers"] = 0;
- o outro usando banco de dados
Portanto, para o método 2, redefino todos os usuários online em Application_Start
. Existem mais de 482.751 registros nessa tabela.