Управление ресурсами SQL Server
Хотя некоторые управляемые экземпляры SQL Server или SQL Azure предназначены для баз данных одного приложения, конфигурация часто наблюдается в критически важных приложениях, многие серверы поддерживают базы данных для нескольких приложений с различными требованиями к производительности и циклами пиковых рабочих нагрузок. Балансировка этих различных требований может быть сложной задачей для администраторов. Одним из эффективных способов управления ресурсами сервера является использование регулятора ресурсов, представленного в SQL Server 2008.
Регулятор ресурсов — это функция в управляемых экземплярах SQL Server и Azure SQL, которые позволяют детализировать контроль над ЦП, физическими ввода-выводами и ресурсами памяти для входящих запросов приложений. При включении на уровне экземпляра регулятор ресурсов использует функцию классификатора, чтобы определить способ обработки подключений, разделив сеансы на группы рабочих нагрузок. Каждая группа рабочей нагрузки настраивается для использования определенного пула системных ресурсов.
Пулы ресурсов
Пул ресурсов представляет физические ресурсы, доступные на сервере. SQL Server всегда имеет два пула: по умолчанию и внутреннему, даже если регулятор ресурсов не включен. Внутренний пул зарезервирован для критически важных функций SQL Server и не может быть ограничен. Пул по умолчанию, а также любые пулы ресурсов, которые вы явно определяете, можно настроить с ограничениями на ресурсы, которые они могут использовать. Для каждого неинтернаального пула можно указать следующие ограничения:
- Минимальный и максимальный процент загрузки ЦП
- Процент ограничения на использование ЦП
- Минимальный и максимальный процент памяти
- Сходство узла NUMA
- Минимальное и максимальное число операций ввода-вывода в секунду на том
Примечание.
Изменения в пуле ресурсов влияют только на новые сеансы, а не на те, которые уже выполняются. Поэтому изменение пула не ограничивает ресурсы длительного процесса. Исключением из этого правила является внешний пул, используемый со службами машинного обучения SQL Server, которые могут быть ограничены изменением пула даже для текущих сеансов.
Все параметры пула ресурсов, за исключением минимального и максимального процента ЦП, представляют жесткие ограничения, которые нельзя превышать. Минимальный или максимальный процент ЦП применяется только при возникновении конфликтов на ЦП. Например, если задано не более 70%, рабочая нагрузка может использовать до 100% доступных циклов ЦП при отсутствии спорных действий. Однако если выполняются другие рабочие нагрузки, рабочая нагрузка будет ограничена 70%.
Группа рабочей нагрузки
Группа рабочей нагрузки служит контейнером для запросов сеансов, классифицируемых функцией классификатора. Как и пулы ресурсов, есть две встроенные группы: по умолчанию и внутренние. Каждая группа рабочей нагрузки связана с одним пулом ресурсов, но пул ресурсов может размещать несколько групп рабочей нагрузки. По умолчанию все подключения направляются в группу рабочей нагрузки по умолчанию, если функция классификатора не назначает их определяемой пользователем группе. Группа рабочих нагрузок по умолчанию использует ресурсы, выделенные пулу ресурсов по умолчанию.
Функция-классификатор
Функция-классификатор выполняется во время установления соединения с экземпляром SQL Server и классифицирует каждое соединение, относя его к конкретной группе рабочей нагрузки. Если функция возвращает значение NULL, по умолчанию или имя несуществующей группы рабочей нагрузки, сеанс передается в группу рабочей нагрузки по умолчанию. Поскольку функция-классификатор выполняется для каждого соединения, ее необходимо проверить на эффективность. Ниже показан пример функции-классификатора, которая классифицирует пользователей по имени.
CREATE FUNCTION dbo.RGClassifier()
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @WorkloadGroup AS SYSNAME
IF(SUSER_NAME() = 'ReportUser')
SET @WorkloadGroup = 'ReportServerGroup'
ELSE IF (SUSER_NAME() = 'PrimaryUser')
SET @WorkloadGroup = 'PrimaryServerGroup'
ELSE
SET @WorkloadGroup = 'default'
RETURN @WorkloadGroup
END
Вы можете увеличить сложность определения функции, показанной в примере, но убедитесь, что более сложная функция не влияет на производительность пользователя.
Варианты использования Resource Governor
Регулятор ресурсов используется в основном в мультитенантных сценариях, где группа баз данных совместно использует один экземпляр SQL Server, а производительность должна поддерживаться согласованно для всех пользователей сервера. Resource Governor также можно использовать для ограничения ресурсов, используемых операциями обслуживания, такими как проверки согласованности и перестроение индекса, чтобы обеспечить достаточный объем ресурсов для обработки запросов пользователей в периоды обслуживания.