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

Как установить минимальное выделение ресурсов SQL Server для базы данных?

За прошедшую рождественскую праздничную неделю, когда на веб-сайте, над которым я работаю, был очень низкий трафик, мы увидели несколько исключений с истекшим временем ожидания запроса (по одному каждый день >> 26, 28, 29 и 30 декабря). на нескольких страницах, требующих аутентификации пользователя. Мы редко видели исключения истечения времени ожидания запроса до этой недели с очень низким трафиком.

Мы полагаем, что тайм-ауты были вызваны тем, что база данных, которую она использует, была «остановлена» на SQL Server, и на ее раскрутку уходит больше времени при поступлении запроса.

На SQL Server (SQL Server 2005) есть 2 базы данных, одна предназначена специально для этого приложения, а другая - для общедоступного веб-сайта и для аутентификации; поэтому в случае, когда пользователи не вошли в приложение (что определенно могло происходить в течение нескольких часов в рождественскую неделю), база данных приложения, вероятно, не получала запросов. Мы думаем, что на этом этапе SQL Server перераспределил ресурсы другой базе данных, а затем, когда поступил запрос, потребовалось дополнительное время для раскрутки базы данных приложения и истекло время ожидания.

Есть ли способ указать SQL Server постоянно предоставлять минимальное количество ресурсов базе данных?

Убедитесь, что для свойства «Auto-Close» базы данных установлено значение FALSE.

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

РЕДАКТИРОВАТЬ: Если это не так, проверьте еще несколько вещей:

  • Ваш SQL-сервер пытается запустить сканирование на наличие вирусов с интенсивным вводом-выводом или что-то еще в периоды низкой активности? Если да, не забудьте исключить папки SQL.
  • Есть ли другие части вашего приложения, которые могут здесь нести ответственность? Например, если вы используете IIS с веб-приложением .Net, сброс пула приложений приведет к повторной компиляции страниц при их следующем вызове.

Помимо этого, единственное, о чем я могу думать (не считая обновления до SQL 2008 Enterprise Edition с Resource Governer), - это оптимизировать ваш запрос, чтобы он выполнялся оптимально, даже если таблицы не кэшированы.

Разумеется, будут применяться все обычные рекомендации по настройке производительности, включая правильную индексацию (предпочтительно с индексами) и т. Д.

В SQL 2008 используется Регулятор ресурсов:

  • Возможность классифицировать входящие соединения и направлять их рабочие нагрузки в определенную группу.
  • Возможность отслеживать использование ресурсов для каждой рабочей нагрузки в группе.
  • Возможность объединять ресурсы и устанавливать для конкретного пула ограничения на использование ЦП и выделение памяти. Это предотвращает или минимизирует вероятность неконтролируемых запросов.
  • Возможность связывать сгруппированные рабочие нагрузки с определенным пулом ресурсов.
  • Возможность определять и устанавливать приоритеты для рабочих нагрузок.

В SSMS (Management Studio) щелкните правой кнопкой мыши имя сервера в обозревателе объектов, чтобы получить свойства сервера. Выберите Память в разделе выбора страницы. Здесь вы устанавливаете минимальный и максимальный объем памяти, который будет доступен для SQL Server. Отложите достаточно для элементов, связанных с ОС (я обычно использую 4 ГБ), а затем сделайте остальное доступным для SQL Server. Я предполагаю, что, вращая вниз и увеличивая скорость, вы имеете в виду кеширование (процедуру и буфер), которое может быть проблемой.

Надеюсь это поможет.

Мы полагаем, что тайм-ауты произошли из-за того, что база данных, которую она использует, «откручивается» на SQL Server и требует больше времени для раскрутки при поступлении запроса.

Какую диагностику вы провели, чтобы прийти к такому выводу? Убедитесь, что вы решаете правильную проблему, когда внедряете решение.