CREATE RESOURCE POOL (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

创建 资源调控器 资源池。 资源池表示数据库引擎实例的物理资源的子集(CPU、内存和 IO)。 资源管理器允许你在资源池之间保留或限制服务器资源,SQL Server最多可保留64个池,Azure SQL 托管实例最多可达40个。

资源调控器在 SQL Server 的每个版本中都不可用。 有关SQL Server各版本支持的功能列表,请参见SQL Server 2025的版本及支持功能

注意

若要修改 Azure SQL 托管实例中的资源调控器配置,必须在主副本的 master 数据库上下文中。

Transact-SQL 语法约定

语法

CREATE RESOURCE POOL pool_name
[ WITH
    (
        [ MIN_CPU_PERCENT = value ]
        [ [ , ] MAX_CPU_PERCENT = value ]
        [ [ , ] CAP_CPU_PERCENT = value ]
        [ [ , ] AFFINITY {SCHEDULER =
                  AUTO
                | ( <scheduler_range_spec> )
                | NUMANODE = ( <NUMA_node_range_spec> )
                } ]
        [ [ , ] MIN_MEMORY_PERCENT = value ]
        [ [ , ] MAX_MEMORY_PERCENT = value ]
        [ [ , ] MIN_IOPS_PER_VOLUME = value ]
        [ [ , ] MAX_IOPS_PER_VOLUME = value ]
    )
]
[;]

<scheduler_range_spec> ::=
{ SCHED_ID | SCHED_ID TO SCHED_ID }[,...n]

<NUMA_node_range_spec> ::=
{ NUMA_node_ID | NUMA_node_ID TO NUMA_node_ID }[,...n]

参数

pool_name

资源池的用户定义名称。 pool_name 为字母数字,最多可包含 128 个字符,在数据库引擎实例中必须唯一,并且必须符合数据库标识符的规则。

MIN_CPU_PERCENT =

指定资源池中所有请求在CPU争用时保证的平均CPU带宽。 value 为整数且默认设置为 0。 value 的允许范围是 0 到 100。

MAX_CPU_PERCENT =

指定在CPU争用时,资源池中所有请求可获得的最大平均CPU带宽。 value 为整数且默认设置为 100。 value 的允许范围是 1 到 100。

CAP_CPU_PERCENT =

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

指定资源池中所有请求接收的 CPU 带宽的硬上限。 将 CPU 最大带宽级别限制为与指定值相同。 value 为整数且默认设置为 100。 value 的允许范围是 1 到 100。

注意

由于 CPU 治理的统计性质,你可能会注意到偶尔出现超出 CAP_CPU_PERCENT中指定的值的短峰值。

AFFINITY {调度器 = 自动 |( <scheduler_range_spec> )|NUMANODE = (<NUMA_node_range_spec>)}

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

将资源池附加到特定的计划程序。 默认值为 AUTO

指定 <scheduler_range_spec>AFFINITY SCHEDULER 将资源池关联到由给定 ID 标识的数据库引擎计划程序。 这些 ID 映射到 scheduler_id 列中的值。

指定 <NUMA_node_range_spec>AFFINITY NUMANODE 将资源池关联到映射到对应于给定 NUMA 节点或节点范围的逻辑 CPU 的数据库引擎计划程序。 可以使用以下 Transact-SQL 查询来发现物理 NUMA 配置与数据库引擎计划程序 ID 之间的映射。

SELECT osn.memory_node_id AS numa_node_id,
       sc.cpu_id,
       sc.scheduler_id
FROM sys.dm_os_nodes AS osn
INNER JOIN sys.dm_os_schedulers AS sc
ON osn.node_id = sc.parent_node_id
   AND
   sc.scheduler_id < 1048576;

MIN_MEMORY_PERCENT =

指定为无法与其他资源池共享的资源池保留的最小查询工作区内存量。 value 为整数且默认设置为 0。 允许的范围从 0 到 100。

MAX_MEMORY_PERCENT =

指定此资源池中请求可以使用的最大查询工作区内存量。 value 为整数且默认设置为 100。 value 的允许范围是 1 到 100。

MIN_IOPS_PER_VOLUME =

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

指定为资源池保留的每个磁盘卷每秒的最小 I/O 操作数 (IOPS)。 value 的允许范围是 0 到 2^31-1 (2,147,483,647)。 指定 0 以指示池的最小值。 默认值为 0。

MAX_IOPS_PER_VOLUME =

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

指定可用于该资源池的每个磁盘卷每秒的最大 I/O 操作数 (IOPS)。 value 的允许范围是 0 到 2^31-1 (2,147,483,647)。 指定 0 以删除池的 IOPS 限制。 默认值为 0。

如果池的 MAX_IOPS_PER_VOLUME 设置为 0,则池根本不受 IO 控制,并且即使其他池已设置 MIN_IOPS_PER_VOLUME,也可以获取系统中的所有 IOPS。 在这种情况下,建议将此池的 MAX_IOPS_PER_VOLUME 值设置为高数字(例如,最大值 2^31-1),以使此池 IO 受管理,并遵循其他池可能存在的 IOPS 预留。

备注

所有资源池的 MIN_CPU_PERCENTMIN_MEMORY_PERCENT 的总和不能超过 100%。

MIN_IOPS_PER_VOLUMEMAX_IOPS_PER_VOLUME 指定每秒最小和最大 IO 数。 IO 可以是读取或写入,并且可以是任何大小。 因此,具有相同的 IOPS 限制,最小和最大 IO 吞吐量可能会因工作负荷中的 IO 大小组合而异。

MAX_CPU_PERCENTMAX_MEMORY_PERCENT 的值必须分别大于或等于 MIN_CPU_PERCENTMIN_MEMORY_PERCENT 的值。

CAP_CPU_PERCENT 不同 MAX_CPU_PERCENT 之处在于,与池相关的工作负载可以使用超过的 MAX_CPU_PERCENT CPU容量(如果有的话),但不能超过的值 CAP_CPU_PERCENT。 尽管峰值可能比 CAP_CPU_PERCENT短,但工作负荷在较长时间内不能超过 CAP_CPU_PERCENT,即使有额外的 CPU 容量可用也是如此。

每个关联组件(计划程序(s)或 NUMA 节点(s)的总 CPU 百分比不能超过 100%。

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

权限

需要 CONTROL SERVER 权限。

示例

有关其他资源调控器配置示例,请参阅 资源调控器配置示例和最佳做法

创建资源池

此示例创建了一个名为 bigPool的资源池。 此池使用默认资源调控器设置。

CREATE RESOURCE POOL bigPool;
ALTER RESOURCE GOVERNOR RECONFIGURE;

设置 CPU 和内存预留和限制

此示例按如下所示配置 adhocPool 资源池:

  • 分别使用 MIN_CPU_PERCENTMIN_MEMORY_PERCENT 保留 10% 的 CPU 和 5% 的查询工作区内存。
  • 使用 MAX_MEMORY_PERCENT设置 15% 的查询工作区内存限制。
  • 使用 MAX_CPU_PERCENTCAP_CPU_PERCENT 分别设置 30% 的软 CPU 上限和 30% 的硬 CPU 上限。
  • 使用 AFFINITY SCHEDULER将池关联到两个逻辑 CPU 范围(0 到 63 和 128 到 191)。

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

CREATE RESOURCE POOL adhocPool
WITH (
     MIN_CPU_PERCENT = 10,
     MAX_CPU_PERCENT = 20,
     CAP_CPU_PERCENT = 30,
     MIN_MEMORY_PERCENT = 5,
     MAX_MEMORY_PERCENT = 15,
     AFFINITY SCHEDULER = (0 TO 63, 128 TO 191)
     );

设置 IOPS 预留和限制

此示例使用 MIN_IOPS_PER_VOLUME为池保留 200 IOPS,并使用 MAX_IOPS_PER_VOLUME将每个卷的 IOPS 限制为 1000。 这些值控制使用资源池的请求可用的物理 I/O 读取和写入操作总数。

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

CREATE RESOURCE POOL PoolAdmin
WITH (
     MIN_IOPS_PER_VOLUME = 200,
     MAX_IOPS_PER_VOLUME = 1000
     );