CREATE RESOURCE POOL (Transact-SQL)
適用於:SQL ServerAzure SQL 受控執行個體
在資源集區 建立
資源管理員無法在每一版的 SQL Server 中使用。 如需 SQL Server 版本所支援的功能清單,請參閱 sql Server 2022
注意
針對 Azure SQL 受控實例,您必須位於 master
資料庫中,才能修改資源管理員組態。
語法
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_schedulers中 scheduler_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_PERCENT
或 MIN_MEMORY_PERCENT
總和不能超過 100%。
MIN_IOPS_PER_VOLUME
和 MAX_IOPS_PER_VOLUME
指定每秒 IOS 的最小值和最大值。 IO 可以是讀取或寫入,而且可以是任何大小。 因此,使用相同的 IOPS 限制,最小和最大 IO 輸送量可能會根據工作負載中的 IO 大小混合而有所不同。
MAX_CPU_PERCENT
和 MAX_MEMORY_PERCENT
的值必須分別大於或等於 MIN_CPU_PERCENT
和 MIN_MEMORY_PERCENT
的值。
CAP_CPU_PERCENT
與 MAX_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_PERCENT
和MIN_MEMORY_PERCENT
保留 10% 的 CPU 和 5% 的查詢工作區內存。 - 使用
MAX_MEMORY_PERCENT
設定 15% 的查詢工作區內存限制。 - 分別使用
MAX_CPU_PERCENT
和CAP_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
);