Назад | Перейти на главную страницу

Диагностика причины длительных запросов в IIS 7.0

Мы запускаем веб-приложение ASP.NET на IIS 7.0, Windows Server 2008 R2 с SQL Server 2008 R2 для БД.

По выходным, когда трафик высок, длина очереди запросов на серверах IIS увеличивается (до 800 запросов), а затем уменьшается каждую минуту или около того.

Я вижу, что серверы обрабатывают некоторые запросы, которые, согласно представлению «Текущие запросы» в диспетчере IIS, выполняются долго (их значение «Истекшее время» составляет от 20 до 50 секунд).

Эти запросы не обязательно являются сложными, на самом деле, я не могу понять, почему они занимают так много времени.

Может быть, потому что клиент закрывает соединение на своей стороне?

Спасибо, Шломи

Похоже, это обычная проблема с пулом соединений и со многими открытыми соединениями. На вашем DAL должно быть что-то вроде этого (неважно, mssql это или mysql):

(Я предполагаю, что вы используете 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;
            }
        }
    }

с помощью гарантировать, что SqlDataReader будет правильно удален. Это всего лишь базовый пример, но обычно у вас должен быть (у вас может быть) общий класс для всех операций DAL, которые предоставляют помощники соединения и реализуют IDisposable. Я рекомендую иметь базовый класс, от которого происходят все классы DAL.

Если проблема не в DAL, я бы порекомендовал глубже покопаться в базе данных, используя Профайлер SQL Server для оценки выполнения запросов.

Вы также можете использовать SQL Server Monitor для проверки среднего времени выполнения и незакрытых соединений. Если у вашего DAL есть проблема, вы увидите много ожидающих / ожидающих соединений.