Регулятор ресурсов появился в версии SQL Server 2008, по замыслу разработчиков он должен был сделать время отклика приложений более прогнозируемым, особенно в многоабонентской среде. Первоначальная реализация регулятора ресурсов позволяет ограничить ресурсы процессора и памяти, которые могут быть выделены в ответ на запрос базы данных. В результате запросы, интенсивно потребляющие ресурсы, не могут захватить слишком много ресурсов. Это особенно важно потому, что пользователи таких инструментов, как Reporting Services, Report Builder и Power BI, могут создавать и запускать собственные отчеты, далеко не оптимальные с точки зрения потребления системных ресурсов.

В SQL Server 2014 регулятор ресурсов дополнен возможностью указывать минимальное и максимальное число операций ввода-вывода на один том, а также функциями управления процессором и памятью. Это полезно при хостинге и в других ситуациях, связанных с консолидацией баз данных, когда требуется достичь более высокой плотности баз данных и более прогнозируемой производительности приложений. Если рабочая нагрузка одного из приложений отличается высокой интенсивностью ввода-вывода, то потенциально она может перегрузить подсистему хранения данных и повлиять на другие приложения. Требования ввода-вывода могут влиять на другие рабочие нагрузки так же или даже больше, чем требования к ресурсам процессора и памяти.

Регулятор ресурсов состоит из трех основных компонентов: пулов ресурсов, групп рабочей нагрузки и классификатора.

  • Пулы ресурсов. По умолчанию в регуляторе ресурсов используется два пула: внутренний и пул по умолчанию. Внутренний пул используется самим SQL Server, а все пользовательские действия происходят в пуле по умолчанию. Кроме того, можно создать собственный настраиваемый пул ресурсов.
  • Группы рабочей нагрузки. Группы рабочей нагрузки представляют задания, выполняемые в системе. Изначально существует две группы рабочей нагрузки: внутренняя и группа по умолчанию. Все внутренние действия системы собраны во внутренней группе рабочей нагрузки, а все пользовательские действия — в группе по умолчанию. Также можно создать собственные группы рабочей нагрузки. У групп рабочей нагрузки три приоритета: низкий, средний и высокий.
  • Классификатор. Классификатор — функция, которая оценивает входящие запросы заданий и распределяет их по соответствующим группам рабочей нагрузки.

В регуляторе ресурсов SQL Server 2014 появилось два новых параметра пулов ресурсов, с помощью которых можно управлять операциями ввода-вывода: MIN_IOPS_PER_VOLUME и MAX_IOPS_PER_VOLUME. Чтобы использовать новые параметры, нужно создать пул ресурсов, группу рабочей нагрузки и функцию классификатора для сопоставления входящих подключений соответствующему пулу ресурсов. Например, следующий программный код T-SQL показывает, как создать пул ресурсов, группу рабочей нагрузки и функцию классификатора, чтобы ограничить ввод-вывод для указанной базы данных 50 операциями ввода-вывода в секунду.

USE master;
GO
CREATE RESOURCE POOL MyDBPool WITH
(
       MAX_IOPS_PER_VOLUME = 50,
       MIN_IOPS_PER_VOLUME = 1
);
GO

CREATE WORKLOAD GROUP MyDBGroup
USING MyDBPool;
GO
CREATE FUNCTION dbo.MyDBFunction()
RETURNS SYSNAME WITH SCHEMABINDING
AS
BEGIN
IF ORIGINAL_DB_NAME() = 'MyDB'
BEGIN
RETURN 'MyDBGroup'
END
RETURN 'default'
END;
GO

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION =
  dbo.MyDBFunction);
ALTER RESOURCE GOVERNOR RECONFIGURE;

Дополнительные сведения об обновленном регуляторе ресурсов SQL Server 2014 можно найти на сайте Resource Governor в сети MSDN (https://msdn.microsoft.com/en-us/bb933866.aspx) и в блоге SQL Server (http://blogs.technet.com/b/dataplatforminsider/archive/2013/11/07/io-resource-governance-in-sql-server-2014.aspx).