共用方式為


CREATE RESOURCE POOL (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

在資源集區 建立 資源管理員。 資源集區代表 Database Engine 實例的實體資源子集(CPU、記憶體和 IO)。 資源管理員可讓您在資源集區之間保留或限制伺服器資源,最多64個集區。

資源管理員無法在每一版的 SQL Server 中使用。 如需 SQL Server 版本所支援的功能清單,請參閱 sql Server 2022版本和支援的功能。

注意

針對 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 個字元,在 Database Engine 實例內必須是唯一的,而且必須符合 資料庫標識符的規則

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 = AUTO | ( <scheduler_range_spec> ) | NUMANODE = (<NUMA_node_range_spec>)}

適用於:SQL Server 2012 (11.x) 和更新版本。

將資源集區附加至特定排程器。 預設值為 AUTO

指定 <scheduler_range_spec>AFFINITY SCHEDULER 將資源集區親和化至指定標識碼所識別的 Database Engine 排程器。 這些標識碼會對應至 sys.dm_os_schedulersscheduler_id 數據行中的值。

針對 指定 <NUMA_node_range_spec>AFFINITY NUMANODE 將資源集區親和化至對應至指定 NUMA 節點或節點範圍的邏輯 CPU 的 Database Engine 排程器。 您可以使用下列 Transact-SQL 查詢來探索實體 NUMA 組態與 Database Engine 排程器識別符之間的對應。

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 指定每秒 IOS 的最小值和最大值。 IO 可以是讀取或寫入,而且可以是任何大小。 因此,使用相同的 IOPS 限制,最小和最大 IO 輸送量可能會根據工作負載中的 IO 大小混合而有所不同。

MAX_CPU_PERCENTMAX_MEMORY_PERCENT 的值必須分別大於或等於 MIN_CPU_PERCENTMIN_MEMORY_PERCENT 的值。

CAP_CPU_PERCENTMAX_CPU_PERCENT 不同,與集區相關聯的工作負載可以使用高於 MAX_CPU_PERCENT 值 (如果有的話) 但不高於 CAP_CPU_PERCENT 值的 CPU 容量。 雖然尖峰可能比 CAP_CPU_PERCENT短,但即使有額外的CPU容量可用,工作負載仍不能超過 CAP_CPU_PERCENT

每個親和化元件 (scheduler(s) 或 NUMA 節點的總 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,設定 20% 的軟 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
     );