Открыть сервис

Resource Governor

Resource Governor — это компонент системы управления базами данных Microsoft SQL Server, предназначенный для ограничения и распределения ресурсов сервера (процессорного времени, памяти и операций ввода-вывода) между различными рабочими нагрузками. Resource Governor позволяет администратору определять политики управления ресурсами, гарантируя предсказуемую производительность для критически важных приложений и предотвращая монополизацию ресурсов одной нагрузкой.

История

Механизм Resource Governor был впервые представлен в версии SQL Server 2008 (ранее известной как Katmai) под кодовым название «R2». Основной целью разработки было решение проблемы «голодных» запросов, когда один ресурсоёмкий запрос (например, длительный отчёт или массовая загрузка данных) мог существенно замедлить выполнение оперативных транзакций.

В последующих версиях SQL Server функциональность Resource Governor расширялась:

Архитектура и компоненты

Resource Governor состоит из трёх ключевых концептуальных компонентов:

Пул ресурсов (Resource Pool)

Пул ресурсов представляет собой логический контейнер, который определяет долю ресурсов сервера (CPU, память, I/O), доступную для группы рабочих нагрузок. На сервере существуют два предопределённых пула:

Администратор может создавать собственные пулы ресурсов, задавая для них минимальные и максимальные проценты использования CPU, памяти и пропускной способности I/O. Например, можно создать пул «Отчёты», который получает максимум 30% CPU и 2 ГБ памяти.

Группа рабочей нагрузки (Workload Group)

Группа рабочей нагрузки является контейнером внутри пула ресурсов. Для каждой группы задаются специфические параметры выполнения запросов, такие как:

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

Функция классификатора (Classifier Function)

Классификатор — это пользовательская функция на языке Transact-SQL (T-SQL), которая определяет, к какой группе рабочей нагрузки следует отнести каждый входящий сеанс. Функция анализирует свойства сеанса (например, имя пользователя, имя приложения, имя хоста, роль базы данных или логин) и возвращает имя группы рабочей нагрузки.

Типичный пример: функция проверяет, является ли пользователь «ReportUser», и возвращает имя «ReportingWorkloadGroup». Если пользователь не найден, возвращается NULL, что означает направление сеанса в пул по умолчанию.

Принцип работы

Процесс работы Resource Governor можно описать в несколько этапов:

  1. Входящий запрос: клиентское приложение отправляет запрос на SQL Server.
  2. Классификация: система вызывает функцию классификатора (если она определена). Функция анализирует логин, имя приложения, хост и другие параметры, и возвращает идентификатор группы рабочей нагрузки.
  3. Привязка к группе: запрос привязывается к определённой группе рабочей нагрузки, а та, в свою очередь, к пулу ресурсов.
  4. Выделение ресурсов: SQL Server использует предопределённые лимиты пула для управления выделением CPU, памяти и I/O для данного сеанса. Если пул достиг своего максимума, запрос может быть поставлен в очередь или завершён, в зависимости от настроек группы (параметр «Request execution timeout»).
  5. Выполнение: запрос выполняется в рамках выделенного бюджета ресурсов. Если запрос пытается превысить лимиты (например, запросить больше памяти, чем разрешено), он может быть приостановлен, завершён или выполнен с использованием меньшего объёма ресурсов.

Возможности и ограничения

Возможности

Ограничения

Настройка и управление

Настройка Resource Governor осуществляется через графический интерфейс SQL Server Management Studio (SSMS) или с помощью Transact-SQL (T-SQL). Основные шаги:

  1. Создание пула ресурсов: CREATE RESOURCE POOL ReportsPool WITH (MIN_CPU_PERCENT = 10, MAX_CPU_PERCENT = 30, MIN_MEMORY_PERCENT = 10, MAX_MEMORY_PERCENT = 20);
  2. Создание группы рабочей нагрузки: CREATE WORKLOAD GROUP ReportingGroup USING ReportsPool;
  3. Создание функции классификатора: CREATE FUNCTION dbo.Classifier() RETURNS SYSNAME WITH SCHEMABINDING AS ...
  4. Привязка классификатора: ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.Classifier);
  5. Включение Resource Governor: ALTER RESOURCE GOVERNOR RECONFIGURE;

Для мониторинга использования ресурсов администраторы используют динамические административные представления (DMV), такие как sys.dm_resource_governor_resource_pools и sys.dm_resource_governor_workload_groups.

Применение

Resource Governor широко применяется в средах, где одновременно выполняются разнородные нагрузки. Типичные сценарии:

Источники

  1. Документация Microsoft SQL Server — Resource Governor (SQL Server Technical Documentation).
  2. SQL Server Books Online (BOL) — компоненты и настройка Resource Governor.
  3. Г. К. Баранов, «Администрирование SQL Server 2019», 2021.
  4. П. В. Дмитриев, «Оптимизация производительности SQL Server», 2020.
  5. Статья «Resource Governor: Best Practices and Troubleshooting» на сайте SQLShack (без ссылки).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →