CREATE WORKLOAD GROUP (Transact-SQL)CREATE WORKLOAD GROUP (Transact-SQL)

適用対象: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

リソース ガバナー ワークロード グループを作成し、そのワークロード グループをリソース ガバナー リソース プールに関連付けます。Creates a Resource Governor workload group and associates the workload group with a Resource Governor resource pool. リソース ガバナーは、MicrosoftMicrosoftSQL ServerSQL Server のすべてのエディションで使用できるわけではありません。Resource Governor is not available in every edition of MicrosoftMicrosoftSQL ServerSQL Server. SQL ServerSQL Serverの各エディションでサポートされる機能の一覧については、「 SQL Server 2016 の各エディションがサポートする機能」を参照してください。For a list of features that are supported by the editions of SQL ServerSQL Server, see Features Supported by the Editions of SQL Server 2016.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions.

構文Syntax

CREATE WORKLOAD GROUP group_name
[ WITH
    ( [ IMPORTANCE = { LOW | MEDIUM | HIGH } ]
      [ [ , ] REQUEST_MAX_MEMORY_GRANT_PERCENT = value ]
      [ [ , ] REQUEST_MAX_CPU_TIME_SEC = value ]
      [ [ , ] REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value ]
      [ [ , ] MAX_DOP = value ]
      [ [ , ] GROUP_MAX_REQUESTS = value ] )
 ]
[ USING {
    [ pool_name | "default" ]
    [ [ , ] EXTERNAL external_pool_name | "default" ] ]
    } ]
[ ; ]

引数Arguments

group_name group_name
ワークロード グループのユーザー定義の名前を指定します。Is the user-defined name for the workload group. group_name には、英数字を最大 128 文字まで使用できます。SQL ServerSQL Server のインスタンス内で一意である必要があり、識別子のルールに従っている必要があります。group_name is alphanumeric, can be up to 128 characters, must be unique within an instance of SQL ServerSQL Server, and must comply with the rules for identifiers.

IMPORTANCE = { LOW | MEDIUM | HIGH }IMPORTANCE = { LOW | MEDIUM | HIGH }
ワークロード グループでの要求の相対的な重要度を指定します。Specifies the relative importance of a request in the workload group. 重要度は次のいずれかで、MEDIUM が既定値です。Importance is one of the following, with MEDIUM being the default:

  • LOWLOW
  • MEDIUM (既定)MEDIUM (default)
  • HIGHHIGH

注意

各重要度の設定は、内部に計算用の数値として格納されます。Internally each importance setting is stored as a number that is used for calculations.

IMPORTANCE は、リソース プールに対してローカルです。同じリソース プール内の異なる重要度のワークロード グループは互いに影響しますが、別のリソース プールのワークロード グループには影響しません。IMPORTANCE is local to the resource pool; workload groups of different importance inside the same resource pool affect each other, but do not affect workload groups in another resource pool.

REQUEST_MAX_MEMORY_GRANT_PERCENT = value REQUEST_MAX_MEMORY_GRANT_PERCENT = value
1 つの要求にプールから割り当てられる最大メモリ量を指定します。Specifies the maximum amount of memory that a single request can take from the pool. value は、MAX_MEMORY_PERCENT で指定したリソース プールのサイズが基準になります。value is a percentage relative to the resource pool size specified by MAX_MEMORY_PERCENT.

valueSQL Server 2017 (14.x)SQL Server 2017 (14.x) までの整数と SQL Server 2019 (15.x)SQL Server 2019 (15.x) で始まる float です。value is an integer up to SQL Server 2017 (14.x)SQL Server 2017 (14.x) and a float starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x). 既定値は 25 です。Default value is 25. value の許容範囲は 1 ~ 100 です。The allowed range for value is from 1 through 100.

注意

指定した量のみがクエリの実行時に許可されるメモリとして割り当てられます。The amount specified only refers to query execution grant memory.

重要

value を 0 に設定すると、ユーザー定義のワークロード グループでは SORT と HASH JOIN 操作を含むクエリが実行されなくなります。Setting value to 0 prevents queries with SORT and HASH JOIN operations in user-defined workload groups from running.

同時に他のクエリが実行されているとサーバーが空きメモリを十分に確保できない可能性があるため、value を 70 より大きな値に設定することはお勧めしません。It is not recommended to set value greater than 70 because the server may be unable to set aside enough free memory if other concurrent queries are running. これによってやがては、クエリの時間切れエラー 8645 が発生します。This may eventually lead to query time-out error 8645.

注意

クエリのメモリ要求がこのパラメーターによって指定されている制限を超えると、サーバーは次のように対応します。If the query memory requirements exceed the limit that is specified by this parameter, the server does the following:

  • ユーザー定義のワークロード グループでは、メモリ要求が制限より低くなるか、並列処理の次数が 1 になるまで、サーバーはクエリの並列処理の次数を下げます。For user-defined workload groups, the server tries to reduce the query degree of parallelism until the memory requirement falls under the limit, or until the degree of parallelism equals 1. それでもクエリのメモリ要求が制限を超える場合は、エラー 8657 が発生します。If the query memory requirement is still greater than the limit, error 8657 occurs.

  • 内部および既定のワークロード グループでは、そのクエリに必要なメモリの確保がサーバーによって許可されます。For internal and default workload groups, the server permits the query to obtain the required memory.

サーバーに十分な物理メモリがない場合は、どちらの場合も時間切れエラー 8645 が発生する可能性があります。Be aware that both cases are subject to time-out error 8645 if the server has insufficient physical memory.

REQUEST_MAX_CPU_TIME_SEC = value REQUEST_MAX_CPU_TIME_SEC = value
要求が使用できる最大 CPU 時間を秒単位で指定します。Specifies the maximum amount of CPU time, in seconds, that a request can use. value は、0 または正の整数にする必要があります。value must be 0 or a positive integer. value の既定の設定が 0 の場合は、無制限を示します。The default setting for value is 0, which means unlimited.

注意

既定では、リソース ガバナーでは最大時間を超過しても、要求は継続されます。By default, Resource Governor will not prevent a request from continuing if the maximum time is exceeded. ただし、イベントが生成されます。However, an event will be generated. 詳細については、「CPU Threshold Exceeded イベント クラス」を参照してください。For more information, see CPU Threshold Exceeded Event Class.

重要

SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP2 および SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU3 以降では、トレース フラグ 2422 を使用すると、最大時間を超えたときにリソース ガバナーが要求を中止します。Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP2 and SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU3, and using trace flag 2422, Resource Governor will abort a request when the maximum time is exceeded.

REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value
メモリ許可 (作業バッファー メモリ) が使用可能になるのをクエリが待機できる最大時間を秒単位で指定します。Specifies the maximum time, in seconds, that a query can wait for a memory grant (work buffer memory) to become available. value は、0 または正の整数にする必要があります。value must be 0 or a positive integer. value の既定の設定である 0 の場合、クエリ コストに基づく内部の計算を使用して、最大時間が決定されます。The default setting for value, 0, uses an internal calculation based on query cost to determine the maximum time.

注意

メモリ許可のタイムアウトに達しても、常にクエリが失敗するとは限りません。A query does not always fail when memory grant time-out is reached. クエリが失敗するのは、同時実行クエリ数が多すぎる場合だけです。A query will only fail if there are too many concurrent queries running. それ以外の場合、クエリは最小限のメモリ許可しか取得できないので、クエリのパフォーマンスが低下します。Otherwise, the query may only get the minimum memory grant, resulting in reduced query performance.

MAX_DOP = value MAX_DOP = value
並列クエリ実行に対する並列処理の最大限度 (MAXDOP) を指定します。Specifies the maximum degree of parallelism (MAXDOP) for parallel query execution. value は、0 または正の整数にする必要があります。value must be 0 or a positive integer. value の許容範囲は 0 から 64 です。The allowed range for value is from 0 through 64. value の既定の設定は 0 で、グローバル設定が使用されます。The default setting for value, 0, uses the global setting. MAX_DOP は次のように処理されます。MAX_DOP is handled as follows:

注意

ワークロード グループの MAX_DOP では、並列処理の最大限度に対するサーバー構成と、MAXDOP データベース スコープ構成がオーバーライドされます。Workload group MAX_DOP overrides the server configuration for max degree of parallelism and the MAXDOP database scoped configuration.

ヒント

これをクエリ レベルで行うには、MAXDOP クエリ ヒントを使用します。To accomplish this at the query level, use the MAXDOP query hint. ワークロード グループの MAX_DOP を超えない限り、クエリ ヒントとして並列処理の最大限度を設定することは有効です。Setting the maximum degree of parallelism as a query hint is effective as long as it does not exceed the workload group MAX_DOP. MAXDOP クエリ ヒントの値が Resource Governor を使用して構成されている値を超える場合、SQL Server データベース エンジンSQL Server Database Engine ではリソース ガバナーの MAX_DOP の値が使用されます。If the MAXDOP query hint value exceeds the value that is configured by using the Resource Governor, the SQL Server データベース エンジンSQL Server Database Engine uses the Resource Governor MAX_DOP value. MAXDOP クエリ ヒントでは常に、並列処理の最大限度のサーバー構成がオーバーライドされます。The MAXDOP query hint always overrides the server configuration for max degree of parallelism.

データベース レベルでこれを行うには、MAXDOP データベース スコープ構成を使用します。To accomplish this at the database level, use the MAXDOP database scoped configuration.

これをサーバー レベルで行うには、並列処理の最大限度 (MAXDOP) サーバー構成オプションを使用します。To accomplish this at the server level, use the max degree of parallelism (MAXDOP) server configuration option.

GROUP_MAX_REQUESTS = value GROUP_MAX_REQUESTS = value
ワークロード グループで実行を許可する同時要求の最大数を指定します。Specifies the maximum number of simultaneous requests that are allowed to execute in the workload group. value には、0 または正の整数を指定する必要があります。value must be a 0 or a positive integer. value の既定の設定は 0 であり、これでは無制限の要求が許可されます。The default setting for value is 0, and allows unlimited requests. 同時要求の最大数に達した場合、そのグループのユーザーはログインできますが、同時要求数が指定した値を下回るまで待機状態になります。When the maximum concurrent requests are reached, a user in that group can log in, but is placed in a wait state until concurrent requests are dropped below the value specified.

USING { pool_name | "default" }USING { pool_name | "default" }
ワークロード グループを pool_name で識別されるユーザー定義のリソース プールに関連付けます。Associates the workload group with the user-defined resource pool identified by pool_name. 実質的には、これによってワークロード グループがグループ リソースに配置されます。This in effect puts the workload group in the resource pool. pool_name を指定していない場合、または USING 引数を使用していない場合、ワークロード グループは事前に定義されたリソース ガバナーの既定のプールに配置されます。If pool_name is not provided, or if the USING argument is not used, the workload group is put in the predefined Resource Governor default pool.

予約語の "default" を USING で使用する場合は、引用符 ("") または角かっこ ([]) で囲む必要があります。"default" is a reserved word and when used with USING, must be enclosed by quotation marks ("") or brackets ([]).

注意

定義済みのワークロード グループおよびリソース プールではすべて、"default" などの小文字の名前が使用されています。Predefined workload groups and resource pools all use lower case names, such as "default". 大文字と小文字を区別する照合順序を使用するサーバーでは、これを考慮する必要があります。This should be taken into account for servers that use case-sensitive collation. SQL_Latin1_General_CP1_CI_AS など、大文字と小文字を区別しない照合順序を使用するサーバーでは、"default" と "Default" が同じものと見なされます。Servers with case-insensitive collation, such as SQL_Latin1_General_CP1_CI_AS, will treat "default" and "Default" as the same.

EXTERNAL external_pool_name | "default"EXTERNAL external_pool_name | "default"
適用対象: SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) から SQL ServerSQL Server まで)。Applies to: SQL ServerSQL Server ( SQL Server 2016 (13.x)SQL Server 2016 (13.x) through SQL ServerSQL Server).

ワークロード グループには、外部リソース プールを指定できます。Workload group can specify an external resource pool. ワークロード グループを定義し、2 つのプールに関連付けることができます。You can define a workload group and associate with 2 pools:

  • SQL ServerSQL Server ワークロードおよびクエリのリソース プールA resource pool for SQL ServerSQL Server workloads and queries
  • 外部プロセス用の外部リソース プールAn external resource pool for external processes. 詳細については、「sp_execute_external_script (Transact-SQL)」を参照してください。For more information, see sp_execute_external_script (Transact-SQL).

RemarksRemarks

REQUEST_MEMORY_GRANT_PERCENT が使用される場合、インデックスの作成では、パフォーマンスの改善のために最初に付与されたのよりも多くのワークスペース メモリを使用できます。When REQUEST_MEMORY_GRANT_PERCENT is used, index creation is allowed to use more workspace memory than what is initially granted for improved performance. この特別な処理は、SQL ServerSQL Server のリソース ガバナーでサポートされています。This special handling is supported by Resource Governor in SQL ServerSQL Server. ただし、最初のメモリ許可も追加のメモリ許可も、リソース プール設定およびワークロード グループ設定によって制限されます。However, the initial grant and any additional memory grant are limited by resource pool and workload group settings.

MAX_DOP の制限は、タスクごとに設定されます。The MAX_DOP limit is set per task. この設定は、要求ごとまたはクエリ制限ごとではありません。It is not a per request or per query limit. つまり、並列クエリ実行中に、1 つの要求で、スケジューラに割り当てられてた複数のタスクを生成することができます。This means that during a parallel query execution, a single request can spawn multiple tasks which are assigned to a scheduler. 詳細については、「スレッドおよびタスクのアーキテクチャ ガイド」を参照してください。For more information, see the Thread and Task Architecture Guide.

MAX_DOP が使用されていて、コンパイル時にクエリが直列としてマークされている場合は、ワークロード グループまたはサーバー構成の設定にかかわらず、実行時に並列に変更することはできません。When MAX_DOP is used and a query is marked as serial at compile time, it cannot be changed back to parallel at run time regardless of the workload group or server configuration setting. 構成後の MAX_DOP は、メモリの不足時にのみ低くすることができます。After MAX_DOP is configured, it can only be lowered due to memory pressure. ワークロード グループの再構成は、許可メモリ キューで待機している間は認識されません。Workload group reconfiguration is not visible while waiting in the grant memory queue.

パーティション テーブルのインデックス作成Index Creation on a Partitioned Table

非固定パーティション テーブルのインデックス作成によって消費されるメモリは、含まれるパーティションの数に比例します。The memory consumed by index creation on non-aligned partitioned table is proportional to the number of partitions involved. 必要なメモリの合計が、Resource Governor のワークロード グループの設定によって課せられているクエリごとの制限 REQUEST_MAX_MEMORY_GRANT_PERCENT を超えると、このインデックス作成の実行に失敗します。If the total required memory exceeds the per-query limit REQUEST_MAX_MEMORY_GRANT_PERCENT imposed by the Resource Governor workload group setting, this index creation may fail to execute. "default" ワークロード グループでは、クエリごとの制限を超えてもクエリの開始に必要な最低限のメモリを使用できるようになっているので、そのようなクエリを実行するのに十分な量のメモリが "default" リソース プールに対して構成されていれば、同じインデックス作成を "default" ワークロード グループで実行できる可能性があります。Because the "default" workload group allows a query to exceed the per-query limit with the minimum required memory, the user may be able to run the same index creation in "default" workload group, if the "default" resource pool has enough total memory configured to run such query.

アクセス許可Permissions

CONTROL SERVER 権限が必要です。Requires CONTROL SERVER permission.

Example

Resource Governor の既定の設定を使用し、Resource Governor の既定のプールに配置される、newReports という名前のワークロード グループを作成します。Create a workload group named newReports which uses the Resource Governor default settings, and is in the Resource Governor default pool. この例では default プールを指定していますが、必須ではありません。The example specifies the default pool, but this is not required.

CREATE WORKLOAD GROUP newReports
    USING "default" ;
GO

参照See Also