ALTER RESOURCE GOVERNOR (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

此语句执行以下资源调控器操作:

  • 启用或禁用资源调控器。
  • 应用在执行 CREATE | ALTER | DROP WORKLOAD GROUPCREATE | ALTER | DROP RESOURCE POOLCREATE | ALTER | DROP EXTERNAL RESOURCE POOL 语句时指定的配置更改。
  • 为传入会话配置分类。
  • 重置工作负荷组和资源池统计信息。
  • 设置每个磁盘卷的最大排队 I/O 操作数。

Transact-SQL 语法约定

语法

ALTER RESOURCE GOVERNOR
    { RECONFIGURE
          [ WITH
                ( [ CLASSIFIER_FUNCTION = { schema_name.function_name | NULL } ]
                  [ [ , ] MAX_OUTSTANDING_IO_PER_VOLUME = value ]
                )
          ]
      | DISABLE
      | RESET STATISTICS
    }
[ ; ]

参数

RECONFIGURE

如果未启用资源调控器,RECONFIGURE 启用资源调控器。 启用资源调控器具有以下结果:

  • 为新会话执行分类器函数(如果有),将其分配给工作负荷组。
  • 遵循并强制执行资源调控器配置中指定的资源预留和限制。
  • 启用资源调控器之前存在的请求可能会受到启用资源调控器时所做的任何配置更改的影响。

启用资源调控器后,RECONFIGURE 应用 CREATE | ALTER | DROP WORKLOAD GROUPCREATE | ALTER | DROP RESOURCE POOLCREATE | ALTER | DROP EXTERNAL RESOURCE POOL 语句在上次使用 RECONFIGURE 或上次重启数据库引擎之后所做的任何配置更改。

重要

必须执行 ALTER RESOURCE GOVERNOR RECONFIGURE 才能使任何资源调控器配置更改生效。

CLASSIFIER_FUNCTION = { schema_name.function_name | NULL }

注册由 schema_name.function_name 指定的分类函数。 此函数对每个新会话进行分类,并将会话分配给工作负荷组。 使用 NULL 时,新会话会自动分配给 default 工作负荷组。

MAX_OUTSTANDING_IO_PER_VOLUME = value

适用于:SQL Server 2014 (12.x) 及更高版本。

设置每个磁盘卷的最大排队 I/O 操作数。 这些 I/O 操作可以是任何大小的读取或写入。 MAX_OUTSTANDING_IO_PER_VOLUME 的最大值为 100。 该值不是百分比。 此设置用于将 IO 资源调控优化为磁盘卷的 IO 特性。 它提供系统级安全检查,使数据库引擎能够满足为资源池指定的 MIN_IOPS_PER_VOLUME 设置,即使其他池的 MAX_IOPS_PER_VOLUME 设置设置为无限制。 有关详细信息,请参阅 CREATE RESOURCE POOL

DISABLE

禁用资源调控器。 禁用资源调控器具有以下结果:

  • 未执行分类器函数。
  • 所有新用户会话会自动分类到 default 工作负荷组中。
  • 系统会话分为 internal 工作负荷组。
  • 所有现有的工作负荷组和资源池设置被重置为其默认值。 达到限制时不会触发任何事件。
  • 正常系统监视不受影响。
  • 可以进行资源调控器配置更改,但更改在启用资源调控器之前不会生效。
  • 重启数据库引擎后,资源调控器不会加载其配置,而是仅使用 defaultinternal 工作负荷组和资源池。

RESET STATISTICS

重置 sys.dm_resource_governor_workload_groupssys.dm_resource_governor_resource_pools中公开的所有工作负荷组和资源池的统计信息。

备注

用户事务内不能使用 ALTER RESOURCE GOVERNOR

RECONFIGURE 参数是资源调控器语法的一部分。 它不应与 RECONFIGURE混淆,这是一个单独的 DDL 语句。

有关详细信息,请参阅 资源调控器

权限

需要 CONTROL SERVER 权限。

示例

启用资源调控器

安装 SQL Server 后,将禁用资源调控器。 以下示例启用资源调控器。 执行语句后,启用资源调控器并使用内置工作负荷组和资源池。

ALTER RESOURCE GOVERNOR RECONFIGURE;

将新会话分配到默认组

以下示例通过从资源调控器配置中删除任何现有分类器函数,将所有新会话分配给 default 工作负荷组。 如果未将函数指定为分类器函数,则所有新的用户会话将分配给 default 工作负荷组。 此更改仅应用于新会话。 现有会话不受影响。

ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL);
ALTER RESOURCE GOVERNOR RECONFIGURE;

创建和注册分类器函数

以下示例在 master 数据库中创建名为 dbo.rg_classifier 的分类器函数。 该函数基于用户名或应用程序名称对每个新会话进行分类,并且将会话请求和查询分配到特定工作负荷组。 未映射到指定用户或应用程序名称的会话将分配到默认工作负荷组。 然后,注册分类器函数并应用配置更改。

USE master;
GO

CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN

-- Declare the variable for the function return value.
DECLARE @grp_name AS sysname;

-- If the login name is 'sa', classify the session into the groupAdmin workload group
IF (SUSER_NAME() = 'sa')
  SET @grp_name = 'groupAdmin';

-- Classify SSMS sessions into the groupAdhoc workload group
ELSE IF UPPER(APP_NAME()) LIKE '%MANAGEMENT STUDIO%'
  SET @grp_name = 'groupAdhoc';

-- Classify SSRS sessions into groupReports workload group
ELSE IF UPPER(APP_NAME()) LIKE '%REPORT SERVER%'
  SET @grp_name = 'groupReports';

-- Otherwise, classify the session into the default workload group
ELSE
  SET @grp_name = 'default';

-- Return the name of the workload group
RETURN @grp_name;

END;
GO

-- Register the classifier function and update resource governor configuration
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
ALTER RESOURCE GOVERNOR RECONFIGURE;

重置资源调控器统计信息

以下示例重置所有工作负荷组和资源池统计信息。

ALTER RESOURCE GOVERNOR RESET STATISTICS;

配置MAX_OUTSTANDING_IO_PER_VOLUME设置

以下示例将 MAX_OUTSTANDING_IO_PER_VOLUME 设置设置为 20 个 IO。

ALTER RESOURCE GOVERNOR WITH (MAX_OUTSTANDING_IO_PER_VOLUME = 20);