За прошедшую рождественскую праздничную неделю, когда на веб-сайте, над которым я работаю, был очень низкий трафик, мы увидели несколько исключений с истекшим временем ожидания запроса (по одному каждый день >> 26, 28, 29 и 30 декабря). на нескольких страницах, требующих аутентификации пользователя. Мы редко видели исключения истечения времени ожидания запроса до этой недели с очень низким трафиком.
Мы полагаем, что тайм-ауты были вызваны тем, что база данных, которую она использует, была «остановлена» на SQL Server, и на ее раскрутку уходит больше времени при поступлении запроса.
На SQL Server (SQL Server 2005) есть 2 базы данных, одна предназначена специально для этого приложения, а другая - для общедоступного веб-сайта и для аутентификации; поэтому в случае, когда пользователи не вошли в приложение (что определенно могло происходить в течение нескольких часов в рождественскую неделю), база данных приложения, вероятно, не получала запросов. Мы думаем, что на этом этапе SQL Server перераспределил ресурсы другой базе данных, а затем, когда поступил запрос, потребовалось дополнительное время для раскрутки базы данных приложения и истекло время ожидания.
Есть ли способ указать SQL Server постоянно предоставлять минимальное количество ресурсов базе данных?
Убедитесь, что для свойства «Auto-Close» базы данных установлено значение FALSE.
Если он включен, то в периоды низкого трафика он в основном переводит базу данных в автономный режим. Первый запрос к нему пытается вернуть его в оперативный режим, но в зависимости от размера это может занять некоторое время.
РЕДАКТИРОВАТЬ: Если это не так, проверьте еще несколько вещей:
Помимо этого, единственное, о чем я могу думать (не считая обновления до SQL 2008 Enterprise Edition с Resource Governer), - это оптимизировать ваш запрос, чтобы он выполнялся оптимально, даже если таблицы не кэшированы.
Разумеется, будут применяться все обычные рекомендации по настройке производительности, включая правильную индексацию (предпочтительно с индексами) и т. Д.
В SQL 2008 используется Регулятор ресурсов:
- Возможность классифицировать входящие соединения и направлять их рабочие нагрузки в определенную группу.
- Возможность отслеживать использование ресурсов для каждой рабочей нагрузки в группе.
- Возможность объединять ресурсы и устанавливать для конкретного пула ограничения на использование ЦП и выделение памяти. Это предотвращает или минимизирует вероятность неконтролируемых запросов.
- Возможность связывать сгруппированные рабочие нагрузки с определенным пулом ресурсов.
- Возможность определять и устанавливать приоритеты для рабочих нагрузок.
В SSMS (Management Studio) щелкните правой кнопкой мыши имя сервера в обозревателе объектов, чтобы получить свойства сервера. Выберите Память в разделе выбора страницы. Здесь вы устанавливаете минимальный и максимальный объем памяти, который будет доступен для SQL Server. Отложите достаточно для элементов, связанных с ОС (я обычно использую 4 ГБ), а затем сделайте остальное доступным для SQL Server. Я предполагаю, что, вращая вниз и увеличивая скорость, вы имеете в виду кеширование (процедуру и буфер), которое может быть проблемой.
Надеюсь это поможет.
Мы полагаем, что тайм-ауты произошли из-за того, что база данных, которую она использует, «откручивается» на SQL Server и требует больше времени для раскрутки при поступлении запроса.
Какую диагностику вы провели, чтобы прийти к такому выводу? Убедитесь, что вы решаете правильную проблему, когда внедряете решение.