次の方法で共有


CREATE RESOURCE POOL (Transact-SQL)

適用対象:SQL ServerAzure SQL Managed Instance

リソース プール リソース ガバナーを作成します。 リソース プールは、データベース エンジン インスタンスの物理リソース (CPU、メモリ、IO) のサブセットを表します。 リソース ガバナーを使用すると、リソース プール間で最大 64 個のプールを予約または制限できます。

リソース ガバナーは、SQL Server のすべてのエディションで使用できるわけではありません。 SQL Server の各エディションでサポートされる機能の一覧については、SQL Server 2022の エディションとサポートされる機能を参照してください。

手記

Azure SQL Managed Instance の場合、リソース ガバナーの構成を変更するには、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 = 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_schedulersscheduler_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 です。 値に使用できる範囲は 0 から 100 です。

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_VOLUMEMAX_IOPS_PER_VOLUME では、1 秒あたりの IO の最小値と最大値を指定します。 IO は読み取りまたは書き込みのいずれかであり、任意のサイズにすることができます。 そのため、同じ IOPS 制限により、最小 IO スループットと最大 IO スループットは、ワークロード内の IO サイズの組み合わせによって異なる場合があります。

MAX_CPU_PERCENTMAX_MEMORY_PERCENT の値は、それぞれ MIN_CPU_PERCENTMIN_MEMORY_PERCENT の値以上である必要があります。

CAP_CPU_PERCENTMAX_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_PERCENTMIN_MEMORY_PERCENT を使用して、CPU の 10% と 5% のクエリ ワークスペース メモリを予約します。
  • MAX_MEMORY_PERCENTを使用して、15% のクエリ ワークスペースのメモリ制限を設定します。
  • それぞれ、MAX_CPU_PERCENTCAP_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
     );