CREATE RESOURCE POOL (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

在 SQL Server 中创建资源调控器资源池。 资源池表示数据库引擎实例的部分物理资源(内存、CPU 和 IO)。 数据库管理员可以使用资源调控器在多个资源池之间分发服务器资源,最多可为 64 个池。 资源调控器并非在每个 SQL Server 版本中都提供。 有关 SQL Server各版本支持的功能列表,请参阅 SQL Server 2016 各个版本支持的功能

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]  

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

pool_name
资源池的用户定义名称。 pool_name 由字母数字组成,最多可包含 128 个字符,在 SQL Server 实例中必须是唯一的,并且必须符合标识符规则。

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

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

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

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

AFFINITY {SCHEDULER = AUTO | ( <scheduler_range_spec> ) | NUMANODE = (<NUMA_node_range_spec>)}
适用于:SQL Server 2012 (11.x) 及更高版本。

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

AFFINITY SCHEDULER = (<scheduler_range_spec>) 将资源池映射到由给定 ID 标识的 SQL Server 计划。 这些 ID 映射到 sys.dm_os_schedulers (Transact-SQL) 的 scheduler_id 列中的值。

当使用 AFFINITY NUMANODE = (<NUMA_node_range_spec>) 时,资源池会关联到映射至物理 CPU 的 SQL Server 计划程序,而这些 CPU 与给定的 NUMA 节点或一系列节点相对应。 可以使用以下 Transact-SQL 查询发现物理 NUMA 配置与 SQL Server 计划程序 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
指定为此资源池保留的、不能与其他资源池共享的最小内存量。 value 为整数,默认设置为 0,value 的允许范围为 0 到 100 。

MAX_MEMORY_PERCENT =value
指定此资源池中的请求可使用的总服务器内存量。 value 为整数且默认设置为 100。 value 的允许范围是 1 到 100。

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

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

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

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

如果池的 MAX_IOPS_PER_VOLUME 设置为 0,则该池根本不受管控,可以采用系统中的所有 IOPS,即使其他池设置了 MIN_IOPS_PER_VOLUME 也是如此。 对于这种情况,建议在希望管控此池的 IO 时将该池的 MAX_IOPS_PER_VOLUME 值设置为较高的数字(例如,最大值 2^31-1)。

备注

MIN_IOPS_PER_VOLUMEMAX_IOPS_PER_VOLUME 指定每秒最小和最大读取或写入数。 这些读取或写入可以是任何大小,并且不指示最小或最大流量。

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

CAP_CPU_PERCENT 不同于 MAX_CPU_PERCENT,因为资源池关联的工作负载可以使用高于 MAX_CPU_PERCENT 值的 CPU 容量(如果可用),但不能超过 CAP_CPU_PERCENT 的值。

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

权限

需要 CONTROL SERVER 权限。

示例

1.演示如何创建资源池

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

CREATE RESOURCE POOL bigPool;  
GO  
ALTER RESOURCE GOVERNOR RECONFIGURE;  
GO  

2.将 CAP_CPU_PERCENT 设置为硬上限并设置关联计划程序

将 CAP_CPU_PERCENT 设置为 30% 的硬上限,并将关联计划程序的范围设置为 0 到 63、128 到 191。

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

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

3.设置 MIN_IOPS_PER_VOLUME 和 MAX_IOPS_PER_VOLUME

将 MIN_IOPS_PER_VOLUME 设置为 20,将 MAX_IOPS_PER_VOLUME 设置为 100。 这些值控制可用于资源池的物理 I/O 读取和写入操作。

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

CREATE RESOURCE POOL PoolAdmin  
WITH (  
    MIN_IOPS_PER_VOLUME = 20,  
    MAX_IOPS_PER_VOLUME = 100  
      );  

另请参阅

ALTER RESOURCE POOL (Transact-SQL)
DROP RESOURCE POOL (Transact-SQL)
CREATE WORKLOAD GROUP (Transact-SQL)
ALTER WORKLOAD GROUP (Transact-SQL)
DROP WORKLOAD GROUP (Transact-SQL)
ALTER RESOURCE GOVERNOR (Transact-SQL)
资源调控器资源池
创建资源池