Diagnosticar causa de solicitações de longa execução no IIS 7.0

3

Estamos executando um aplicativo da Web ASP.NET no IIS 7.0, Windows Server 2008 R2, com o SQL Server 2008 R2 para DB.

Nos finais de semana, quando o tráfego é alto, o comprimento da fila de solicitações nos servidores IIS aumenta (até 800 solicitações) e, em seguida, cai a cada minuto.

Posso ver que os servidores estão lidando com algumas solicitações que, de acordo com a exibição "Solicitações atuais" no Gerenciador do IIS, estão em execução há muito tempo (o intervalo de tempo decorrido varia de 20 a 50 segundos).

Essas solicitações não são necessariamente pesadas, na verdade, não consigo entender por que elas estão demorando tanto.

Pode ser porque o cliente está fechando a conexão do lado dele?

Obrigado Shlomi

    
por Shlomi Fruchter 02.10.2011 / 18:50

1 resposta

1

Parece que é o problema comum com o pool de conexões e com muitas conexões abertas. Em seu DAL você deve ter algo assim (não importa se é mssql ou mysql):

(suponho que você esteja usando o DataReader)

    /// <summary>
    /// Selects a single record from the Media table.
    /// </summary>
    public virtual Media Select(int mediaID)
    {
        SqlParameter[] parameters = new SqlParameter[]
        {
            new SqlParameter("@MediaID", mediaID)
        };

        using (SqlDataReader dataReader = SqlClientUtility.ExecuteReader(connectionStringName, CommandType.StoredProcedure, "MediaSelect", parameters))
        {
            if (dataReader.Read())
            {
                return MakeMedia(dataReader);
            }
            else
            {
                return null;
            }
        }
    }

usando garante que o SqlDataReader seja descartado corretamente. Este é apenas um exemplo básico, mas geralmente você deve ter (você pode ter) uma classe comum para todas as operações de DAL que fornecem ajudantes de conexão e que implementam IDisposable. Eu recomendo ter uma classe base da qual todas as classes DAL derivem.

Se o DAL não for o problema, eu recomendo ir mais fundo no banco de dados usando o SQL Server Profiler para avaliar execuções de consultas.

Você também pode usar o SQL Server Monitor para verificar os tempos médios de execução e as conexões não fechadas. Se o seu DAL tiver um problema, você verá muitas conexões pendentes / em espera.

    
por 23.11.2011 / 12:53