locked
Transport-level and timeout expired errors RRS feed

  • Pergunta

  • E ae pessoal


    É o seguinte eu tenho um SQL2K5 SP1 rodando em  W2K3 operando como servidor de sessão para 6 servidores IIS.

     

    Estamos tendo os erros abaixo:

     

    System.Web.HttpException: Unable to connect to SQL Server session database.

    ---> System.Data.SqlClient.SqlException: A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

     

    e

     

    Unable to connect to SQL Server session database.

    ---> System.InvalidOperationException: Timeout expired.

    The timeout period elapsed prior to obtaining a connection from the pool.

    This may have occurred because all pooled connections were in use and max pool size was reached.

     

    JA setamos o max pool size para 500 a o min pool size para 2 em cada IIS, verificamos e reparamos os problemas de rede e nao temos nenhum firewall entre os ervidores, todos estao na mesma rede.

     

    MAs algumas vezes e em determinadas horas (quando temos um numero de acessos elevado) recebemos estes erros (mais ou menos de 10 a 200 erros por segundo).

     

    Provavelmente vcs estao pensando que estes erros acontecem devido ao volume de acessos ao mesmo tempo, mas estes erros continuam acontecendo durante o dia todo num numero de 3 a 30 por segundo. os erros ocorrem, ai demora de 15 a uma hora e acontecem denovo.

     

    Eu coloquei os erros completos abaixo


    Obrigado

     

    Leonardo

     

     

    ERRO 1

     

    System.Web.HttpException: Unable to connect to SQL Server session database.

    ---> System.Data.SqlClient.SqlException: A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

      at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

      at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)

      at

    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)

      at System.Data.SqlClient.TdsParserStateObject.ThrowExceptionAndWarning()

      at System.Data.SqlClient.TdsParserStateObject.WriteSni()

      at System.Data.SqlClient.TdsParserStateObject.WritePacket(Byte flushMode)

      at System.Data.SqlClient.TdsParserStateObject.ExecuteFlush()

      at System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj)

      at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehaviorcmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)

      at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehaviorcmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)

      at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehaviorcmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)

      at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)

      at System.Data.SqlClient.SqlCommand.ExecuteReader()

      at System.Web.SessionState.SqlSessionStateStore.DoGet(HttpContextcontext, String id, Boolean getExclusive, Boolean& locked, TimeSpan&lockAge, Object& lockId, SessionStateActions& actionFlags)

      --- End of inner exception stack trace ---

      at

    System.Web.SessionState.SqlSessionStateStore.ThrowSqlConnectionException(Sql

    Connection conn, Exception e)

      at System.Web.SessionState.SqlSessionStateStore.DoGet(HttpContextcontext, String id, Boolean getExclusive, Boolean& locked, TimeSpan&lockAge, Object& lockId, SessionStateActions& actionFlags)

      at

    System.Web.SessionState.SqlSessionStateStore.GetItemExclusive(HttpContextcontext, String id, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actionFlags)

      at System.Web.SessionState.SessionStateModule.GetSessionStateItem()

      at System.Web.SessionState.SessionStateModule.BeginAcquireState(Objectsource, EventArgs e, AsyncCallback cb, Object extraData)

      at

    System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

      at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&completedSynchronously)

     

    System.Data.SqlClient.SqlException: A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 -An existing connection was forcibly closed by the remote host.)

      at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

      at System.Data.SqlClient.SqlInternalConnection.OnError(SqlExceptionexception, Boolean breakConnection)

      at

    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)

      at System.Data.SqlClient.TdsParserStateObject.ThrowExceptionAndWarning()

      at System.Data.SqlClient.TdsParserStateObject.WriteSni()

      at System.Data.SqlClient.TdsParserStateObject.WritePacket(Byte flushMode)

      at System.Data.SqlClient.TdsParserStateObject.ExecuteFlush()

      at System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC[] rpcArray,

    Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj)

      at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehaviorcmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)

      at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehaviorcmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)

      at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehaviorcmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)

      at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehaviorbehavior, String method)

      at System.Data.SqlClient.SqlCommand.ExecuteReader()

      at System.Web.SessionState.SqlSessionStateStore.DoGet(HttpContextcontext, String id, Boolean getExclusive, Boolean& locked, TimeSpan&lockAge, Object& lockId, SessionStateActions& actionFlags)

     

     

     

    ERRO 2

     

    System.Web.HttpException: Unable to connect to SQL Server session database. ---> System.InvalidOperationException: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.

       at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)

       at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)

       at System.Data.SqlClient.SqlConnection.Open()

       at System.Web.SessionState.SqlSessionStateStore.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo)

       --- End of inner exception stack trace ---

       at System.Web.SessionState.SqlSessionStateStore.ThrowSqlConnectionException(SqlConnection conn, Exception e)

       at System.Web.SessionState.SqlSessionStateStore.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo)

       at System.Web.SessionState.SqlSessionStateStore.GetConnection(String id, Boolean& usePooling)

       at System.Web.SessionState.SqlSessionStateStore.DoGet(HttpContext context, String id, Boolean getExclusive, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actionFlags)

       at System.Web.SessionState.SqlSessionStateStore.GetItemExclusive(HttpContext context, String id, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actionFlags)

       at System.Web.SessionState.SessionStateModule.GetSessionStateItem()

       at System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData)

       at System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

       at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

    ==============================================================

     

    System.InvalidOperationException: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.

       at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)

       at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)

       at System.Data.SqlClient.SqlConnection.Open()

       at System.Web.SessionState.SqlSessionStateStore.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo)

    terça-feira, 29 de julho de 2008 14:59

Respostas

  • Junior,

    Sim o pooling estava ajudando, descobrimos tb que na nossa rede a utilização das placas de rede estava batendo 100% trocamos para gigabit e depois disso com o pooling retirado os erros nao sessaram mas diminuiram drasticamente. Antes eram 300 por segundo agora são 1 ou 2 a cada 15 minutos ou mais, levando em conta o numero de acessos  esta muito bom heheheh.

    Parecia que quando dava um erro de conexão o SQL dava um flush no pool ai as conexões iam para o saco heheheheh.

    Agora outros erros estao aparecendo , vou criar um topico somente para eles...


    Obrigado pela ajuda.

    Leonardo <-- olha o nome heheheheh
    quinta-feira, 31 de julho de 2008 14:24

Todas as Respostas

  • Leandro,

     

    1 - Qual é o protocolo de conexão que esta sendo utilizado para esta instância SQL Server 2005.

     

    2 - Como esta a configuração do seu DNS?

     

    3 - A IIS esta funcionando normalmente?

    terça-feira, 29 de julho de 2008 16:30
  • Junior,

    é Leonardo =D

    respondendo a sua pergunta

    1 - TCP/IP;

    2 - Nosso DNS é integrado ao AD; (se nao for essa a resposta me de um aviso)

    3 - Os IIS estão funcionando corretamente sim.
    quinta-feira, 31 de julho de 2008 13:16
  • Leonardo,

     

    Certo, aparentemente a sua configuração esta correta.

     

    O serviço DNS esta rodando?

     

    quinta-feira, 31 de julho de 2008 13:33
  • Sim esta rodando normalmente, sem problemas aparetemente.

    Agora estes erros sao poucos retiramos o pooling da conexão de sessão, mas ainda ocorre algumas vezes...
    quinta-feira, 31 de julho de 2008 13:43
  • Leonardo,

     

    Isso significa que você esta acumulando muitas conexões no mesmo pool, e esta gerando este timeout, pois o SQL Server tem que ficar aguardando a resposta de alguma delas para saber se pode ou não liberar o espaço para outra conexão.

     

    quinta-feira, 31 de julho de 2008 13:49
  • Entao mas com o pooling os erros eram muitos mais... sem o pooling melhorou muito os erros...


    quinta-feira, 31 de julho de 2008 13:54
  • Leandro,

     

    É isso, o pool de conexão que esta criando este timeout!!!

     

    quinta-feira, 31 de julho de 2008 14:16
  • Junior,

    Sim o pooling estava ajudando, descobrimos tb que na nossa rede a utilização das placas de rede estava batendo 100% trocamos para gigabit e depois disso com o pooling retirado os erros nao sessaram mas diminuiram drasticamente. Antes eram 300 por segundo agora são 1 ou 2 a cada 15 minutos ou mais, levando em conta o numero de acessos  esta muito bom heheheh.

    Parecia que quando dava um erro de conexão o SQL dava um flush no pool ai as conexões iam para o saco heheheheh.

    Agora outros erros estao aparecendo , vou criar um topico somente para eles...


    Obrigado pela ajuda.

    Leonardo <-- olha o nome heheheheh
    quinta-feira, 31 de julho de 2008 14:24
  • Leonardo,

     

    Peço desculpas pelo troca do seu nome.

     

    Como já muitos posts aqui no fórum, as vezes a gente se perde.

     

    O importante neste caso é que você conseguiram realizar uma análise mais detalhada e fazer as manutenções e configurações necessárias!!!

     

    Uma consideração importante, se as suas placas de rede estão batendo 100% de uso, isso significa que a taxa de broadcast que esta sendo gerado entre as máquina esta alta, verifique as configurações da sua máscara de subrede, DNS, Gateway e faixa de IP. 

     

    quinta-feira, 31 de julho de 2008 14:50
  • Junior,

    Sem problemas tava soh enchendo o saco heheheh

    Seguinte realmente era de acesso os 100% para vc ter ideia da quantidade de acessos agente sofre aqui...

    Obrigado pela ajuda

    Leonardo.
    quinta-feira, 31 de julho de 2008 15:05