CREATE WORKLOAD CLASSIFIER (Transact-SQL)
创建用于工作负荷管理的分类器对象。 分类器根据分类器语句定义中指定的参数将传入请求分配给工作负荷组。 对提交的每个请求评估分类器。 如果请求与分类器不匹配,则会将其分配给默认工作负荷组。 默认工作负荷组是 smallrc
资源类。
注意
对托管标识 (MI) 进行分类的行为在 Azure Synapse 工作区中的专用 SQL 池和独立专用 SQL 池(原 SQL DW)之间有所区别。 当独立专用 SQL 池 MI 维护分配的标识时,Azure Synapse 工作区会将 MI 添加到 dbo 角色中。 此项不能更改。 默认情况下,dbo 角色分类为 smallrc
. 为 dbo 角色创建分类器可以向工作负荷组分配请求,而不是 smallrc
。 如果 仅 dbo 太通用,无法分类并产生更广泛的影响,请考虑将标签、会话或基于时间的 分类与 dbo 角色分类结合使用。
语法
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'
当分类器规则满足条件时,名称将请求映射到工作负荷组。 名称 为 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
还可用于对映射到 dbo 角色的多个Microsoft Entra 帐户的请求进行具体分类)。
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
。 不支持超出此限制的其他配置。 建议将分类器分组到通用类别下,以便跨多个工作负荷或用户高效应用单个设置。
分类参数权重
请求可以与多个分类器匹配。 分类器参数有权重。 权重较高的匹配分类器会用于分配工作负载组和重要性。 权重如下所示:
分类器参数 | 重量 |
---|---|
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 的查询,则请求将分类为具有HIGH
重要性的wgDashboards
工作负荷组。 预期可能是将请求分类为wgUserQueries
非工作时间报告的重要性,但权重WLM_LABEL
高于 START_TIME
/END_TIME
。LOW
classifierA
权重为 80
(64
对于用户,以及16
为 WLM_LABEL
)。 classifierB
权重是68
(64
对于用户,4
对于/START_TIME
END_TIME
)。 在这种情况下,可以添加到 WLM_LABEL
classifierB
.
有关详细信息,请参阅 工作负荷权重。
权限
需要 CONTROL DATABASE
权限。
示例
下面的示例演示了如何创建名为 wgcELTRole
的工作负荷分类器。 它使用 staticrc20
工作负荷组、用户 ELTRole
并将 IMPORTANCE 设置为 ABOVE_NORMAL
。
CREATE WORKLOAD CLASSIFIER wgcELTRole
WITH (
WORKLOAD_GROUP = 'staticrc20',
MEMBERNAME = 'ELTRole',
IMPORTANCE = ABOVE_NORMAL
);