CREATE WORKLOAD CLASSIFIER (Transact-SQL)

适用于:Azure Synapse Analytics

创建用于工作负荷管理的分类器对象。 分类器根据分类器语句定义中指定的参数将传入请求分配给工作负荷组。 对提交的每个请求评估分类器。 如果请求与分类器不匹配,则会将其分配给默认工作负荷组。 默认工作负荷组是 smallrc 资源类。

注意

对托管标识 (MI) 进行分类的行为在 Azure Synapse 工作区中的专用 SQL 池和独立专用 SQL 池(原 SQL DW)之间有所区别。 当独立专用 SQL 池 MI 维护分配的标识时,Azure Synapse 工作区会将 MI 添加到 dbo 角色中。 对此无法更改。 默认情况下,dbo 角色分类为 smallrc. 为 dbo 角色创建分类器可以向工作负荷组分配请求,而不是 smallrc。 如果 仅 dbo 太通用,无法分类并产生更广泛的影响,请考虑将标签、会话或基于时间的 分类与 dbo 角色分类结合使用。

Transact-SQL 语法约定

语法

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_namesysname。 此参数最多可以包含 128 个字符,并且必须在实例中是唯一的。

WORKLOAD_GROUP = 'name'

当分类器规则满足条件时,名称将请求映射到工作负荷组。 名称sysname。 此参数最多可以包含 128 个字符,在创建分类器时必须是有效的工作负荷组名称。

可用工作负荷组可在 sys.workload_management_workload_groups 目录视图中找到。

MEMBERNAME = “security_account

用于分类的安全帐户。 security_accountsysname,无默认值。 security_account可以是数据库用户、数据库角色、Microsoft Entra 登录名或 Microsoft Entra 组。

注意

在连接到系统时, user_name() 使用函数来验证 MEMBERNAME 分类过程是否将用于对请求进行分类。 使用MEMBERNAMEuser_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_contextsys.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_TIMEEND_TIMEHH: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_TIMELOW classifierA权重为 8064对于用户,以及16WLM_LABEL)。 classifierB权重是6864对于用户,4对于/START_TIMEEND_TIME)。 在这种情况下,可以添加到 WLM_LABELclassifierB.

有关详细信息,请参阅 工作负荷权重

权限

需要 CONTROL DATABASE 权限。

示例

下面的示例演示了如何创建名为 wgcELTRole 的工作负荷分类器。 它使用 staticrc20 工作负荷组、用户 ELTRole并将 IMPORTANCE 设置为 ABOVE_NORMAL

CREATE WORKLOAD CLASSIFIER wgcELTRole
WITH (
    WORKLOAD_GROUP = 'staticrc20',
    MEMBERNAME = 'ELTRole',
    IMPORTANCE = ABOVE_NORMAL
);