CREATE WORKLOAD CLASSIFIER (Transact-SQL)
建立用於工作負載管理的分類器物件。 分類器會根據分類器陳述式定義中指定的參數,將連入要求指派給工作負載群組。 每個提交的要求都會評估分類器。 如果要求與分類器不相符,則會指派給預設工作負載群組。 默認工作負載群組是 smallrc
資源類別。
注意
在 Azure Synapse 工作區中的專用 SQL 集區與獨立專用 SQL 集區 (先前稱為 SQL DW) 之間,分類受控識別 (MI) 行為會有所不同。 雖然獨立專用 SQL 集區 MI 會維護指派的身分識別,但 Azure Synapse 工作區會將 MI 新增至 dbo 角色。 此限制無法變更。 dbo 角色預設會分類為 smallrc
。 建立 dbo 角色的分類器可讓您將要求指派給 以外的smallrc
工作負載群組。 如果 dbo 本身太泛型而無法分類,而且具有更廣泛的影響,請考慮搭配 dbo 角色分類使用標籤、會話或以時間為基礎的分類。
Syntax
CREATE WORKLOAD CLASSIFIER classifier_name
WITH
( WORKLOAD_GROUP = 'name'
, MEMBERNAME = 'security_account'
[ [ , ] WLM_LABEL = 'label' ]
[ [ , ] WLM_CONTEXT = 'context' ]
[ [ , ] START_TIME = 'HH:MM' ]
[ [ , ] END_TIME = 'HH:MM' ]
[ [ , ] IMPORTANCE = { LOW | BELOW_NORMAL | NORMAL | ABOVE_NORMAL | HIGH } ] )
[ ; ]
注意
Azure Synapse Analytics 的無伺服器 SQL 集區不支援此語法。
引數
classifier_name
指定用來識別工作負載分類器的名稱。 classifier_name為 sysname。 此參數長度最多可達 128 個字元,而且在 實例內必須是唯一的。
WORKLOAD_GROUP = 'name'
當分類器規則符合條件時,name 會將要求對應至工作負載群組。 name 是 sysname。 此參數長度最多可達 128 個字元,而且在分類器建立時必須是有效的工作負載組名。
可用的工作負載群組可以在 sys.workload_management_workload_groups 目錄檢視中找到。
MEMBERNAME = 'security_account'
用來分類的安全性帳戶。 security_account為 sysname,沒有預設值。 security_account可以是資料庫用戶、資料庫角色、Microsoft Entra 登入或Microsoft Entra 群組。
注意
當連線到系統時,請使用 函 user_name()
式來確認 MEMBERNAME
分類程式將用來分類要求。 使用函MEMBERNAME
user_name()
式驗證 有助於疑難解答Microsoft Entra ID 或服務主體分類問題。 如果 user_name()
傳 dbo
回 ,您可以使用 dbo 作為 MEMBERNAME
來分類要求。 dbo 角色的所有成員都會分類。 其他分類參數,例如 WLM_LABEL
或 WLM_CONTEXT
也可用來特別分類來自多個Microsoft Entra 帳戶對應至 dbo 角色的要求。
WLM_LABEL
指定可分類要求的標籤值。 Label 是 nvarchar(255) 類型的選擇性參數。 在要求中使用 OPTION (LABEL),以符合分類器設定。
例如:
CREATE WORKLOAD CLASSIFIER wcELTLoads
WITH (
WORKLOAD_GROUP = 'wgDataLoad',
MEMBERNAME = 'ELTRole',
WLM_LABEL = 'dimension_loads'
);
SELECT COUNT(*) FROM DimCustomer
OPTION (LABEL = 'dimension_loads');
WLM_CONTEXT
指定可分類要求的工作階段內容值。 WLM_CONTEXT
是 nvarchar(255) 類型的選擇性參數。 在提交要求以設定會話內容之前,請使用變數名稱等於 wlm_context
的sys.sp_set_session_context。
例如:
CREATE WORKLOAD CLASSIFIER wcDataLoad
WITH (
WORKLOAD_GROUP = 'wgDataLoad',
MEMBERNAME = 'ELTRole',
WLM_CONTEXT = 'dim_load'
);
--set session context
EXEC sys.sp_set_session_context @key = 'wlm_context', @value = 'dim_load';
--run multiple statements using the wlm_context setting
SELECT COUNT(*) FROM stg.daily_customer_load;
SELECT COUNT(*) FROM stg.daily_sales_load;
--turn off the wlm_context session setting
EXEC sys.sp_set_session_context @key = 'wlm_context', @value = NULL;
START_TIME 和 END_TIME
指定要求可分類的開始時間和結束時間。 START_TIME
和 END_TIME
都是 HH:mm
UTC時區的格式。 START_TIME
和 END_TIME
必須一起指定。
例如:
CREATE WORKLOAD CLASSIFIER wcELTLoads
WITH (
WORKLOAD_GROUP = 'wgDataLoads',
MEMBERNAME = 'ELTRole',
START_TIME = '22:00',
END_TIME = '02:00'
);
IMPORTANCE = { LOW | BELOW_NORMAL | NORMAL | ABOVE_NORMAL | HIGH }
指定要求的相對重要性。 IMPORTANCE
是下列其中一個選項:
LOW
BELOW_NORMAL
NORMAL
(預設值)ABOVE_NORMAL
HIGH
如果未 IMPORTANCE
指定,則會使用工作負載群組的重要性設定。 預設工作負載群組重要性為 NORMAL
。 重要性會影響所排定要求的順序,進而授與資源和鎖定的優先存取權。
備註
使用者定義的分類器數目上限為 100
。 不支援超出此限制的其他設定。 建議您將分類器分組在一般類別下,以在多個工作負載或用戶之間有效率地套用單一設定。
分類參數加權
要求可以符合多個分類器。 分類器參數有加權。 加權較高的比對分類器會用於指派工作負載群組和重要性。 加權如下所示:
分類器參數 | Weight |
---|---|
USER |
64 |
ROLE |
32 |
WLM_LABEL |
16 |
WLM_CONTEXT |
8 |
START_TIME /END_TIME |
4 |
請考慮下列分類器設定。
CREATE WORKLOAD CLASSIFIER classifierA
WITH (
WORKLOAD_GROUP = 'wgDashboards',
MEMBERNAME = 'userloginA',
IMPORTANCE = HIGH,
WLM_LABEL = 'salereport'
);
CREATE WORKLOAD CLASSIFIER classifierB
WITH (
WORKLOAD_GROUP = 'wgUserQueries',
MEMBERNAME = 'userloginA',
IMPORTANCE = LOW,
START_TIME = '18:00',
END_TIME = '07:00'
);
使用者 userloginA
是針對這兩個分類器所設定。 如果 userloginA
執行標籤等於 salesreport
6PM 到 7AM UTC 之間的查詢,要求會分類為具有重要性的 wgDashboards
工作負載群組 HIGH
。 預期可能是將要求分類為wgUserQueries
,且對下班報告的重要性,但的加權WLM_LABEL
高於 START_TIME
/END_TIME
。LOW
的加權classifierA
是 80
(64
針對使用者,加上 16
的 )。WLM_LABEL
的加權是 (針對使用者,4
針對/START_TIME
END_TIME
)。64
68
classifierB
在這裡情況下,您可以將 新增 WLM_LABEL
至 classifierB
。
如需詳細資訊,請參閱 工作負載加權。
權限
需要 CONTROL DATABASE
權限。
範例
下列範例會顯示如何建立名為 wgcELTRole
的工作負載分類器。 它會使用 staticrc20
工作負載群組使用者 ELTRole
,並將 IMPORTANCE 設定為 ABOVE_NORMAL
。
CREATE WORKLOAD CLASSIFIER wgcELTRole
WITH (
WORKLOAD_GROUP = 'staticrc20',
MEMBERNAME = 'ELTRole',
IMPORTANCE = ABOVE_NORMAL
);