CREATE RESOURCE POOL (Transact-SQL)
適用対象:SQL ServerAzure SQL Managed Instance
リソース プール
リソース ガバナーは、SQL Server のすべてのエディションで使用できるわけではありません。 SQL Server の各エディションでサポートされる機能の一覧については、SQL Server 2022の
手記
Azure SQL Managed Instance の場合、リソース ガバナーの構成を変更するには、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 文字で、データベース エンジン インスタンス内で一意である必要があり、データベース識別子の規則に準拠している必要があります。
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
です。
AFFINITY SCHEDULER
の <scheduler_range_spec>
を指定すると、リソース プールが、指定された ID によって識別されるデータベース エンジン スケジューラに関連付けられます。 これらの ID は、sys.dm_os_schedulersの scheduler_id
列の値にマップされます。
AFFINITY NUMANODE
の <NUMA_node_range_spec>
を指定すると、指定された 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 です。
MAX_MEMORY_PERCENT = 値
このリソース プール内の要求で使用できるクエリ ワークスペース メモリの最大量を指定します。 value は整数で、既定の設定は 100 です。 value の許容範囲は 1 ~ 100 です。
MIN_IOPS_PER_VOLUME = 値
適用対象: SQL Server 2014 (12.x) 以降。
リソース プール用に確保するために、ディスク ボリュームごとに、1 秒あたりの最小 I/O 操作 (IOPS) を指定します。 value の許容範囲は 0 から 2^31-1 (2,147,483,647) までです。 プールの最小値を指定しない場合は、0 を指定します。 既定値は 0 です。
MAX_IOPS_PER_VOLUME = 値
適用対象: SQL Server 2014 (12.x) 以降。
リソース プールに許された、ディスク ボリュームごとの 1 秒あたりの最大 I/O 操作 (IOPS) 回数を指定します。 value の許容範囲は 0 から 2^31-1 (2,147,483,647) までです。 プールの IOPS 制限を削除するには、0 を指定します。 既定値は 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
では、1 秒あたりの IO の最小値と最大値を指定します。 IO は読み取りまたは書き込みのいずれかであり、任意のサイズにすることができます。 そのため、同じ IOPS 制限により、最小 IO スループットと最大 IO スループットは、ワークロード内の IO サイズの組み合わせによって異なる場合があります。
MAX_CPU_PERCENT
と MAX_MEMORY_PERCENT
の値は、それぞれ MIN_CPU_PERCENT
と MIN_MEMORY_PERCENT
の値以上である必要があります。
CAP_CPU_PERCENT
と MAX_CPU_PERCENT
の違いは、プールに関連付けられているワークロードが使用する CPU 処理量が、MAX_CPU_PERCENT
の値を超えることはできても (利用可能な場合)、CAP_CPU_PERCENT
の値を超えることはできない点です。
CAP_CPU_PERCENT
よりも短いスパイクが発生する可能性がありますが、追加の CPU 容量が使用可能な場合でも、ワークロードは長期間にわたって CAP_CPU_PERCENT
を超えることはできません。
各アフィニティコンポーネント (スケジューラまたは NUMA ノード) の合計 CPU 使用率は、100% を超えることはできません。
詳細については、「リソース ガバナーの とリソース ガバナー リソース プールの
アクセス許可
CONTROL SERVER
アクセス許可が必要です。
例
その他のリソース ガバナーの構成例については、リソース ガバナーの構成例とベスト プラクティス
リソース プールを作成する
この例では、bigPool
という名前のリソース プールを作成しました。 このプールでは、既定のリソース ガバナー設定が使用されます。
CREATE RESOURCE POOL bigPool;
ALTER RESOURCE GOVERNOR RECONFIGURE;
CPU とメモリの予約と制限を設定する
この例では、adhocPool
リソース プールを次のように構成します。
- それぞれ、
MIN_CPU_PERCENT
とMIN_MEMORY_PERCENT
を使用して、CPU の 10% と 5% のクエリ ワークスペース メモリを予約します。 -
MAX_MEMORY_PERCENT
を使用して、15% のクエリ ワークスペースのメモリ制限を設定します。 - それぞれ、
MAX_CPU_PERCENT
とCAP_CPU_PERCENT
を使用して、20% のソフト CPU 上限を 30% のハード CPU 上限に設定します。 -
AFFINITY SCHEDULER
を使用して、プールを論理 CPU の 2 つの範囲 (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
);
関連コンテンツ
- チュートリアル: リソース ガバナーの構成例とベスト プラクティス
- リソース ガバナーの
- リソース ガバナー リソース プール の
- リソース プール を作成する
- ALTER RESOURCE POOL の
- リソース プール を削除する
- ワークロード グループ を作成する
- ALTER WORKLOAD GROUP の
- ワークロード グループ を削除する
- ALTER RESOURCE GOVERNOR の