Функция классификатора регулятора ресурсов

Область применения: SQL Server Управляемый экземпляр SQL Azure

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

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

Классификация

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

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

Примечание.

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

Чтобы начать использование функции классификатора, необходимо выполнить следующие действия:

  1. Создайте функцию в master базе данных с помощью CREATE FUNCTION. Функция должна использовать привязку схемы.
  2. Для ссылки функции в настройках регулятора ресурсов используйте команду ALTER RESOURCE GOVERNOR с параметром CLASSIFIER_FUNCTION.
  3. Сделайте новую конфигурацию активной с помощью ALTER RESOURCE GOVERNOR RECONFIGURE.

Внимание

Попытка подключения клиента может завершиться, если функция классификатора не завершается в течение периода ожидания подключения, настроенного клиентом. Важно создать функции классификатора, которые завершат выполнение до истечения времени ожидания подключения.

Оставьте функцию классификатора простой. Избегайте использования сложной или потребляющей времени логики. По возможности избегайте доступа к данным в классификаторе.

Функция классификатора имеет следующие характеристики и поведение:

  • Функция определена в области сервера (в master базе данных).
  • Функция определена по привязке схемы. Дополнительные сведения см. в разделе SCHEMABINDING.
  • Функция вычисляется для каждого нового сеанса, даже если включена функция пула подключений.
  • Функция возвращает контекст группы нагрузки для сеанса. Сеанс назначается группе рабочей нагрузки, возвращаемой классификатором в течение всего времени существования сеанса.
  • Если функция возвращает NULL, default или имя несуществующей группы рабочей нагрузки, сеанс получает контекст группы рабочей нагрузки default. Сеанс также получает контекст default, если функция завершилась с ошибкой по какой-либо причине.
  • После добавления или удаления функции классификатора с использованием ALTER RESOURCE GOVERNOR (WITH CLASSIFIER_FUNCTION = ...), изменение вступает в силу только после выполнения инструкции ALTER RESOURCE GOVERNOR RECONFIGURE.
  • Одновременно можно назначить только одну функцию классификатором.
  • Функция классификатора не может быть изменена или удалена до тех пор, пока его статус классификатора не будет удалён с помощью инструкции ALTER RESOURCE GOVERNOR (WITH CLASSIFIER_FUNCTION = ...), которая устанавливает имя функции в NULL или в имя другой функции.
  • При отсутствии функции классификатора все сеансы относятся к группе default.
  • Группы рабочей нагрузки, указанные в выходных данных функции классификатора, находятся вне области ограничения привязки схемы. Например, нельзя удалить таблицу, на которую ссылается функция классификатора, но можно удалить группу рабочей нагрузки, даже если классификатор возвращает имя этой группы.

Включение DAC

Для устранения неполадок и диагностики рекомендуется заранее включить и ознакомиться с выделенным подключением администратора (DAC). DAC не подлежит классификации регулятора ресурсов. Вы можете использовать DAC для мониторинга и устранения неполадок функции классификатора, даже если конфигурация регулятора ресурсов не работает и делает другие подключения недоступными. Дополнительные сведения см. в разделе "Диагностическое подключение" для администраторов баз данных.

Если DAC недоступен для устранения неполадок, можно запустить сервер в одном пользовательском режиме. Хотя подключение в однопользовательском режиме не подлежит классификации, оно не предоставляет возможности диагностировать классификацию диспетчера ресурсов во время ее выполнения.

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

Процесс входа

В контексте регулятора ресурсов процесс входа для сеанса состоит из следующих шагов:

  1. Проверка подлинности для входа.
  2. Выполнение триггера входа. Происходит только в том случае, если триггеры логина существуют в экземпляре сервера.
  3. Классификации.

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

Вы можете отслеживать выполнение триггеров входа и функцию классификатора с помощью sys.dm_exec_sessionsи sys.dm_exec_requests системных представлений.

Примеры

Функция классификатора регулятора ресурсов может использовать широкий спектр пользовательской логики. Дополнительные примеры и пошаговое руководство см. в руководстве. Примеры конфигурации регулятора ресурсов и рекомендации.

А. Имя хоста

Эта функция классифицирует сеансы от определенного имени узла в группу рабочей нагрузки с именем Reports, используя встроенную системную функцию HOST_NAME(). Все остальные сеансы продолжают классифицироваться в группу рабочей нагрузки default .

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (HOST_NAME() IN ('reportserver1','reportserver2'))
        SET @grp_name = 'Reports';
    
    RETURN @grp_name;
END;
GO

В. Имя пользователя

Эта функция классифицирует сеансы на основе определенных имен пользователей или учетных записей службы в группу рабочих нагрузок с именем Reports, используя встроенную системную функцию SUSER_SNAME(). Все остальные сеансы продолжают классифицироваться в группу рабочей нагрузки default .

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (SUSER_SNAME() IN ('Reporting', 'domain/svc_reporting'))
        SET @grp_name = 'Reports';
    
    RETURN @grp_name;
END;
GO

С. Имя приложения

Эта функция классифицирует сеансы с именами конкретных приложений в группу рабочих нагрузок, используя встроенную системную функцию APP_NAME(). Все остальные сеансы продолжают классифицироваться в группу рабочей нагрузки default .

Внимание

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

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @grp_name sysname = 'default';

    IF (APP_NAME() IN ('Microsoft SQL Server Management Studio - Query','azdata'))
        SET @grp_name = 'Adhoc';
    
    RETURN @grp_name;
END;
GO