CREATE WORKLOAD GROUP (Transact-SQL)
選取產品
在以下資料列中,選取您感興趣的產品名稱,隨即只會顯示該產品的資訊。
* SQL Server *
SQL Server 與 SQL 受控執行個體
建立資源管理員工作負載群組,並將工作負載群組與資源管理員資源集區產生關聯。
資源管理員無法在每一版的 SQL Server 中使用。 如需 SQL Server 版本支援的功能清單,請參閱 SQL Server 2022 的版本和支援功能。
注意
針對 Azure SQL 受控實例,您必須位於 master
資料庫中,才能修改資源管理員組態。
語法
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] ]
} ]
[ ; ]
引數
group_name
工作負載群組的使用者定義名稱。 group_name 英數位元,最多可以有 128 個字元,在 Database Engine 的實例內必須是唯一的,而且必須符合 資料庫標識符的規則。
IMPORTANCE = { LOW | MEDIUM | HIGH }
指定要求在工作負載群組中的相對重要性。 預設值為 MEDIUM
。
IMPORTANCE
是包含工作負載群組的資源集區本機。 相同資源集區內不同重要性的工作負載群組彼此影響,但不會影響其他資源集區中的工作負載群組。
REQUEST_MAX_MEMORY_GRANT_PERCENT = value
指定單一要求可從集區取得的最大查詢工作區內存數量。
值 是由 MAX_MEMORY_PERCENT
所定義的資源集區大小百分比。 預設值為 25。
在 SQL Server 2017 (14.x) 和較舊版本中,值 是整數,允許的範圍是從 1 到 100。
從 SQL Server 2019 (15.x) 開始,值可以是使用 float
數據類型的小數。 允許的範圍是從 0 到 100。
重要
指定的數量只是指透過查詢記憶體授與取得的查詢工作區內存。
不建議設定 值 太大(例如大於 70),因為伺服器可能無法為其他並行查詢預留足夠的可用記憶體。 這可能會導致記憶體授與逾時 錯誤 8645。
將 值 設定為 0 或小型值,可能會防止對需要工作區內存的運算符進行查詢,例如 sort
和 hash
,以免在使用者定義的工作負載群組中執行。 如果查詢記憶體需求超過此參數所定義的限制,就會發生下列行為:
- 針對使用者定義的工作負載群組,伺服器會嘗試減少要求 (DOP) 的平行處理原則程度(查詢),直到記憶體需求低於限制,或直到 DOP 等於 1 為止。 如果查詢記憶體需求仍然大於限制,就會發生錯誤 8657,且查詢失敗。
- 針對
internal
和default
工作負載群組,伺服器允許查詢取得所需的記憶體。
在任一情況下,如果伺服器沒有足夠的物理記憶體,可能會發生 錯誤 8645。
REQUEST_MAX_CPU_TIME_SEC = value
指定要求可以使用的最大 CPU 時間量 (以秒為單位)。 value 必須是 0 或正整數。 value 的預設設定為 0,這代表沒有限制。
根據預設,如果超過最大時間,資源管理員不會防止要求繼續。 不過,會產生事件。 如需詳細資訊,請參閱超過 CPU 閾值事件類別。
從 SQL Server 2016 (13.x) SP2 和 SQL Server 2017 (14.x) CU3 開始,並使用 追蹤旗標 2422,資源管理員會在超過 CPU 時間上限時中止要求。
REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value
指定查詢可以等候查詢工作區內存授與可用的最大時間,以秒為單位。 value 必須是 0 或正整數。 value 的預設設定 0 會根據查詢成本使用內部計算來判斷最大時間。
達到記憶體授與逾時時,查詢不一定會失敗。 只有執行太多並行查詢時,查詢才會失敗。 否則,查詢可能只會獲得最小記憶體授與,因而降低查詢效能。
MAX_DOP = value
指定平行查詢執行的最大平行處理原則程度 (MAXDOP
)。
value 允許範圍是從 0 至 64。
value 的預設設定 0 會使用全域設定。
如需詳細資訊,請參閱 MAXDOP。
GROUP_MAX_REQUESTS = value
指定在工作負載群組中可允許執行的最大同時要求數。 value 必須是 0 或正整數。 value 的預設值為 0,會允許無限制的要求。 達到最大並行要求時,可以建立該群組中的會話,但會處於等候狀態,直到並行要求數目低於指定的值為止。
USING { pool_name |[default] }
將工作負載群組與 pool_name所識別的使用者定義資源集區產生關聯,或與 default
資源集區建立關聯。 如果未提供 pool_name,或未指定 USING
自變數,工作負載群組會與內建 default
集區相關聯。
default
是保留字,在 USING
中指定時,必須以方括號([]
)或引號(""
) 括住。
內建資源集區和工作負載群組會使用所有小寫名稱,例如 default
。 在使用區分大小寫定序的伺服器上,使用小寫 default
。 不區分大小寫定序的伺服器會將 default
、Default
和 DEFAULT
視為相同的值。
EXTERNAL external_pool_name |[default]
適用於:SQL Server 2016 (13.x) 和更新版本。
工作負載群組可指定外部資源集區。 您可以定義工作負載群組,並將它與兩個集區產生關聯:
- Database Engine 工作負載的資源集區。
- 一個用於外部處理的外部資源集區。 如需詳細資訊,請參閱 sp_execute_external_script。
備註
如需詳細資訊,請參閱 Resource Governor 和 Resource Governor 工作負載群組。
MAXDOP
針對指定的查詢,會決定有效的 MAXDOP
,如下所示:
- 只要查詢提示未超過工作負載群組
MAX_DOP
設定,MAXDOP
就會接受。 -
MAXDOP
查詢提示一律會覆寫max degree of parallelism
伺服器組態。 如需詳細資訊,請參閱 伺服器組態:平行處理原則的最大程度。 - 工作負載群組
MAX_DOP
會覆寫max degree of parallelism
伺服器組態和MAXDOP
資料庫範圍設定。
MAXDOP
限制是以工作為基礎。 它不是根據要求或查詢限制。 在平行查詢執行期間,單一要求可能會繁衍指派給 排程器的多個工作。 如需詳細資訊,請參閱 線程和工作架構指南。
當查詢在編譯時期標示為序列時(MAXDOP = 1
),不論工作負載群組或伺服器組態設定為何,在運行時間都無法使用平行處理原則執行。 判斷查詢 MAXDOP
之後,只能因為記憶體壓力而降低。 工作負載群組重新設定不會影響在記憶體授與佇列中等候的查詢。
索引建立
基於效能考慮,允許索引建立使用比最初授與更多的記憶體工作區。 資源管理員支援此特殊處理。 不過,初始授與和任何其他記憶體授與會受限於工作負載群組和資源集區設定。
在數據分割數據表上建立非對齊索引所耗用的記憶體,與所涉及的分割區數目成正比。 如果所需的記憶體總計超過 REQUEST_MAX_MEMORY_GRANT_PERCENT
工作負載群組設定強制執行的每個查詢限制,索引建立可能會失敗。 由於 default
工作負載群組允許查詢超過每個查詢限制,且所需的記憶體下限為回溯相容性,因此,如果 default
資源集區有足夠的記憶體總計,您可以使用 default
工作負載群組來建立相同的索引。
權限
需要 CONTROL SERVER
許可權。
範例
在 default
資源集區中建立名為 newReports
的工作負載群組,並限制記憶體授與上限、要求的最大 CPU 時間,以及 MAXDOP
。
CREATE WORKLOAD GROUP newReports
WITH (
REQUEST_MAX_MEMORY_GRANT_PERCENT = 2.5,
REQUEST_MAX_CPU_TIME_SEC = 100,
MAX_DOP = 4
)
USING [default];
相關內容
* SQL 受控執行個體 *
SQL Server 與 SQL 受控執行個體
建立資源管理員工作負載群組,並將工作負載群組與資源管理員資源集區產生關聯。
資源管理員無法在每一版的 SQL Server 中使用。 如需 SQL Server 版本支援的功能清單,請參閱 SQL Server 2022 的版本和支援功能。
注意
針對 Azure SQL 受控實例,您必須位於 master
資料庫中,才能修改資源管理員組態。
語法
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] ]
} ]
[ ; ]
引數
group_name
工作負載群組的使用者定義名稱。 group_name 英數位元,最多可以有 128 個字元,在 Database Engine 的實例內必須是唯一的,而且必須符合 資料庫標識符的規則。
IMPORTANCE = { LOW | MEDIUM | HIGH }
指定要求在工作負載群組中的相對重要性。 預設值為 MEDIUM
。
IMPORTANCE
是包含工作負載群組的資源集區本機。 相同資源集區內不同重要性的工作負載群組彼此影響,但不會影響其他資源集區中的工作負載群組。
REQUEST_MAX_MEMORY_GRANT_PERCENT = value
指定單一要求可從集區取得的最大查詢工作區內存數量。
值 是由 MAX_MEMORY_PERCENT
所定義的資源集區大小百分比。 預設值為 25。
在 SQL Server 2017 (14.x) 和較舊版本中,值 是整數,允許的範圍是從 1 到 100。
從 SQL Server 2019 (15.x) 開始,值可以是使用 float
數據類型的小數。 允許的範圍是從 0 到 100。
重要
指定的數量只是指透過查詢記憶體授與取得的查詢工作區內存。
不建議設定 值 太大(例如大於 70),因為伺服器可能無法為其他並行查詢預留足夠的可用記憶體。 這可能會導致記憶體授與逾時 錯誤 8645。
將 值 設定為 0 或小型值,可能會防止對需要工作區內存的運算符進行查詢,例如 sort
和 hash
,以免在使用者定義的工作負載群組中執行。 如果查詢記憶體需求超過此參數所定義的限制,就會發生下列行為:
- 針對使用者定義的工作負載群組,伺服器會嘗試減少要求 (DOP) 的平行處理原則程度(查詢),直到記憶體需求低於限制,或直到 DOP 等於 1 為止。 如果查詢記憶體需求仍然大於限制,就會發生錯誤 8657,且查詢失敗。
- 針對
internal
和default
工作負載群組,伺服器允許查詢取得所需的記憶體。
在任一情況下,如果伺服器沒有足夠的物理記憶體,可能會發生 錯誤 8645。
REQUEST_MAX_CPU_TIME_SEC = value
指定要求可以使用的最大 CPU 時間量 (以秒為單位)。 value 必須是 0 或正整數。 value 的預設設定為 0,這代表沒有限制。
根據預設,如果超過最大時間,資源管理員不會防止要求繼續。 不過,會產生事件。 如需詳細資訊,請參閱超過 CPU 閾值事件類別。
從 SQL Server 2016 (13.x) SP2 和 SQL Server 2017 (14.x) CU3 開始,並使用 追蹤旗標 2422,資源管理員會在超過 CPU 時間上限時中止要求。
REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value
指定查詢可以等候查詢工作區內存授與可用的最大時間,以秒為單位。 value 必須是 0 或正整數。 value 的預設設定 0 會根據查詢成本使用內部計算來判斷最大時間。
達到記憶體授與逾時時,查詢不一定會失敗。 只有執行太多並行查詢時,查詢才會失敗。 否則,查詢可能只會獲得最小記憶體授與,因而降低查詢效能。
MAX_DOP = value
指定平行查詢執行的最大平行處理原則程度 (MAXDOP
)。
value 允許範圍是從 0 至 64。
value 的預設設定 0 會使用全域設定。
如需詳細資訊,請參閱 MAXDOP。
GROUP_MAX_REQUESTS = value
指定在工作負載群組中可允許執行的最大同時要求數。 value 必須是 0 或正整數。 value 的預設值為 0,會允許無限制的要求。 達到最大並行要求時,可以建立該群組中的會話,但會處於等候狀態,直到並行要求數目低於指定的值為止。
USING { pool_name |[default] }
將工作負載群組與 pool_name所識別的使用者定義資源集區產生關聯,或與 default
資源集區建立關聯。 如果未提供 pool_name,或未指定 USING
自變數,工作負載群組會與內建 default
集區相關聯。
default
是保留字,在 USING
中指定時,必須以方括號([]
)或引號(""
) 括住。
內建資源集區和工作負載群組會使用所有小寫名稱,例如 default
。 在使用區分大小寫定序的伺服器上,使用小寫 default
。 不區分大小寫定序的伺服器會將 default
、Default
和 DEFAULT
視為相同的值。
EXTERNAL external_pool_name |[default]
適用於:SQL Server 2016 (13.x) 和更新版本。
工作負載群組可指定外部資源集區。 您可以定義工作負載群組,並將它與兩個集區產生關聯:
- Database Engine 工作負載的資源集區。
- 一個用於外部處理的外部資源集區。 如需詳細資訊,請參閱 sp_execute_external_script。
備註
如需詳細資訊,請參閱 Resource Governor 和 Resource Governor 工作負載群組。
MAXDOP
針對指定的查詢,會決定有效的 MAXDOP
,如下所示:
- 只要查詢提示未超過工作負載群組
MAX_DOP
設定,MAXDOP
就會接受。 -
MAXDOP
查詢提示一律會覆寫max degree of parallelism
伺服器組態。 如需詳細資訊,請參閱 伺服器組態:平行處理原則的最大程度。 - 工作負載群組
MAX_DOP
會覆寫max degree of parallelism
伺服器組態和MAXDOP
資料庫範圍設定。
MAXDOP
限制是以工作為基礎。 它不是根據要求或查詢限制。 在平行查詢執行期間,單一要求可能會繁衍指派給 排程器的多個工作。 如需詳細資訊,請參閱 線程和工作架構指南。
當查詢在編譯時期標示為序列時(MAXDOP = 1
),不論工作負載群組或伺服器組態設定為何,在運行時間都無法使用平行處理原則執行。 判斷查詢 MAXDOP
之後,只能因為記憶體壓力而降低。 工作負載群組重新設定不會影響在記憶體授與佇列中等候的查詢。
索引建立
基於效能考慮,允許索引建立使用比最初授與更多的記憶體工作區。 資源管理員支援此特殊處理。 不過,初始授與和任何其他記憶體授與會受限於工作負載群組和資源集區設定。
在數據分割數據表上建立非對齊索引所耗用的記憶體,與所涉及的分割區數目成正比。 如果所需的記憶體總計超過 REQUEST_MAX_MEMORY_GRANT_PERCENT
工作負載群組設定強制執行的每個查詢限制,索引建立可能會失敗。 由於 default
工作負載群組允許查詢超過每個查詢限制,且所需的記憶體下限為回溯相容性,因此,如果 default
資源集區有足夠的記憶體總計,您可以使用 default
工作負載群組來建立相同的索引。
權限
需要 CONTROL SERVER
許可權。
範例
在 default
資源集區中建立名為 newReports
的工作負載群組,並限制記憶體授與上限、要求的最大 CPU 時間,以及 MAXDOP
。
CREATE WORKLOAD GROUP newReports
WITH (
REQUEST_MAX_MEMORY_GRANT_PERCENT = 2.5,
REQUEST_MAX_CPU_TIME_SEC = 100,
MAX_DOP = 4
)
USING [default];
相關內容
* Azure Synapse
Analytics *
Azure Synapse Analytics
建立工作負載群組。 工作負載群組是一組要求的容器,而且是在系統上設定工作負載管理的基礎。 工作負載群組提供保留資源以進行工作負載隔離、包含資源、定義每個要求的資源,以及遵守執行規則的能力。 一旦陳述式完成,設定就會生效。
CREATE WORKLOAD GROUP group_name
WITH
( MIN_PERCENTAGE_RESOURCE = value
, CAP_PERCENTAGE_RESOURCE = value
, REQUEST_MIN_RESOURCE_GRANT_PERCENT = value
[ [ , ] REQUEST_MAX_RESOURCE_GRANT_PERCENT = value ]
[ [ , ] IMPORTANCE = { LOW | BELOW_NORMAL | NORMAL | ABOVE_NORMAL | HIGH } ]
[ [ , ] QUERY_EXECUTION_TIMEOUT_SEC = value ] )
[ ; ]
group_name
指定用來識別工作負載群組的名稱。
group_name 是一種 sysname。 它的長度最多可以是 128 個字元,且在執行個體內必須是唯一的。
MIN_PERCENTAGE_RESOURCE = value
針對該工作負載群組指定一個保證的最小資源配置,該資源不會與其他工作負載群組共用。 記憶體是唯一受此參數控管的資源。
value 為從 0 到 100 的整數範圍。 所有工作負載群組之間的 min_percentage_resource 總和不能超過 100。 min_percentage_resource 的值不能大於 cap_percentage_resource。 每個服務等級允許最小的有效值。 如需詳細資訊,請參閱有效值。
CAP_PERCENTAGE_RESOURCE = value
指定工作負載群組中所有要求的資源使用率上限。 CPU 和記憶體資源都受限於此參數。 允許的整數值範圍為 1 到 100。 cap_percentage_resource 的值必須大於 min_percentage_resource。 如果 min_percentage_resource 在其他工作負載群組中設定為大於零,則可以減小 cap_percentage_resource 的有效值。
REQUEST_MIN_RESOURCE_GRANT_PERCENT = 值
設定每個要求配置的最小資源量。 記憶體是唯一受此參數控管的資源。
value 為必要的參數,其十進位範圍介於 0.75 到 100.00 之間。 request_min_resource_grant_percent 的值必須是 0.25 的倍數,必須是 min_percentage_resource 的因數,而且小於 cap_percentage_resource。 每個服務等級允許最小的有效值。 如需詳細資訊,請參閱有效值。
例如:
CREATE WORKLOAD GROUP wgSample
WITH
( MIN_PERCENTAGE_RESOURCE = 26 -- integer value
, REQUEST_MIN_RESOURCE_GRANT_PERCENT = 3.25 -- factor of 26 (guaranteed a minimum of 8 concurrency)
, CAP_PERCENTAGE_RESOURCE = 100 )
請考慮用於資源類別的值,作為 request_min_resource_grant_percent 的指導方針。 下表包含 Gen2 的資源配置。
資源類別 | 資源百分比 |
---|---|
Smallrc | 3% |
Mediumrc | 10% |
Largerc | 22% |
Xlargerc | 70% |
REQUEST_MAX_RESOURCE_GRANT_PERCENT = value
設定每個要求配置的資源數量上限。 記憶體是唯一受此參數控管的資源。
value 為選擇性參數,預設值等於 request_min_resource_grant_percent。
value 必須大於或等於 request_min_resource_grant_percent。 當 equest_max_resource_grant_percent 的值大於 request_min_resource_grant_percent 而且有可用的系統資源時,會將其他資源配置給要求。
IMPORTANCE = { LOW | BELOW_NORMAL | NORMAL | ABOVE_NORMAL | HIGH }
指定要求在工作負載群組中的相對重要性。 下列任一個為其重要性,其中 NORMAL 為預設值:
- LOW
- BELOW_NORMAL
- NORMAL (預設)
- ABOVE_NORMAL
- HIGH
在工作負載群組中設定的重要性,是工作負載群組中所有要求的預設重要性。 使用者也可以在分類器層級設定重要性,該重要性可以覆寫工作負載群組的重要性設定。 這樣可以區分工作負載群組內要求的重要性,以便更快速地存取非保留的資源。 當跨工作負載群組的 min_percentage_resource 總和小於 100 時,會根據重要性來指派非保留的資源。
QUERY_EXECUTION_TIMEOUT_SEC = value
指定查詢在取消之前可以執行的最長時間 (以秒為單位)。
value 必須是 0 或正整數。 值的預設設定為 0,這代表查詢永不逾時。QUERY_EXECUTION_TIMEOUT_SEC 會在查詢處於執行中狀態時計算,而非在查詢排入佇列時。
備註
系統會針對回溯相容性自動建立對應至資源類別的工作負載群組。 這些系統定義的工作負載群組無法卸除。 可以建立額外 8 位使用者定義的工作負載群組。
如果工作負載群組是在 min_percentage_resource
大於零的情況下建立,則 CREATE WORKLOAD GROUP
陳述式將會排入佇列,直到有足夠的資源可建立工作負載群組為止。
有效值
min_percentage_resource
、cap_percentage_resource
、request_min_resource_grant_percent
和 request_max_resource_grant_percent
參數具有在目前服務層級內容及其他工作負載群組組態中調整的有效值。
request_min_resource_grant_percent
參數具有有效值,因為視服務層級而定,每個查詢都會有所需的最少資源。 例如,在最低服務層級 DW100c,每個要求都需要最少 25% 的資源。 如果工作負載群組設定為 3% 的 request_min_resource_grant_percent
和 request_max_resource_grant_percent
,則當執行個體啟動時,這兩個參數的有效值會調整為 25%。 如果執行個體擴大為 DW1000c,則兩個參數的設定值和有效值為 3%,因為 3% 是該服務層級所支援的最小值。 如果執行個體的擴大至高於 DW1000c,則這兩個參數的設定值和有效值都會保持為 3%。 請參閱下表,以取得不同服務層級之有效值的詳細資料。
服務等級 | REQUEST_MIN_RESOURCE_GRANT_PERCENT 的最低有效值 | 並行查詢數目上限 |
---|---|---|
DW100c | 25% | 4 |
DW200c | 12.5% | 8 |
DW300c | 8% | 12 |
DW400c | 6.25% | 16 |
DW500c | 5% | 20 |
DW1000c | 3% | 32 |
DW1500c | 3% | 32 |
DW2000c | 2% | 48 |
DW2500c | 2% | 48 |
DW3000c | 1.5% | 64 |
DW5000c | 1.5% | 64 |
DW6000c | 0.75% | 128 |
DW7500c | 0.75% | 128 |
DW10000c | 0.75% | 128 |
DW15000c | 0.75% | 128 |
DW30000c | 0.75% | 128 |
min_percentage_resource
參數必須大於或等於有效 request_min_resource_grant_percent
。
min_percentage_resource
設定為小於有效 min_percentage_resource
的工作負載群組,其值在執行階段會調整為零。 發生這種情況時,針對 min_percentage_resource
設定的資源可在所有工作負載群組間共用。 例如,wgAdHoc
為 10% 且在 DW1000c 上執行的工作負載群組 min_percentage_resource
,會有 10% 的有效 min_percentage_resource
(3% 是 DW1000c 所支援的最小值)。
wgAdhoc
在 DW100c 上的有效 min_percentage_resource 為 0%。 針對 wgAdhoc
設定的 10% 會在所有工作負載群組之間共用。
cap_percentage_resource
參數也具有有效值。 如果工作負載群組 wgAdhoc
設定為 100% 的 cap_percentage_resource
,而另一個工作負載群組 wgDashboards
是以 25% 的 min_percentage_resource
所建立,則 cap_percentage_resource
的有效 wgAdhoc
會變成 75%。
若要了解工作負載群組的執行階段值,最簡單的方式就是查詢系統檢視 sys.databases dm_workload_management_workload_groups_stats。
權限
需要 CONTROL DATABASE
權限