Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本文解释了在 Azure Synapse 中使用专用 SQL 池时,将工作负荷组和重要性分配给传入请求的工作负荷分类过程。
分类
工作负荷管理分类允许通过分配 资源类 和 重要性将工作负荷策略应用于请求。
可通过多种方法来分类数据仓库工作负荷,而最简单且最常用的分类方法是加载和查询。 可以使用 insert、update 和 delete 语句加载数据。 可以使用 select 查询数据。 数据仓库解决方案通常对加载活动使用工作负荷策略,例如,分配具有更多资源的更高资源类。 可对查询应用不同的工作负载策略,例如,与加载活动相比,查询的重要性可能更低。
还可以将加载和查询工作负荷进一步分类。 进一步分类能够更好地控制工作负荷。 例如,查询工作负载可能包括多维数据集刷新、仪表板查询或即席查询。 可以使用不同的资源类或重要性设置将其中的每个查询工作负荷分类。 负载也可以受益于子分类。 可将大型转换分配到较大的资源类。 更高的重要性可用于确保在天气数据或社交数据馈送之前加载关键销售数据。
并非所有语句都经过分类,因为它们不需要资源或重要性来影响执行。
DBCC 命令、BEGIN、COMMIT 和 ROLLBACK TRANSACTION 语句未分类。
分类过程
通过使用 sp_addrolemember将用户分配到角色,并为该角色设置相应的资源类,来实现专用 SQL 池的分类。 使用此功能时,为请求做特征化以超出资源类登录的能力将受到限制。 现在, CREATE WORKLOAD CLASSIFIER 语法提供了更丰富的分类方法。 使用此语法,专用 SQL 池用户可以通过 workload_group 参数为请求分配重要性和系统资源数。
分类权重
在分类过程中,将使用权重来确定分配哪个工作负荷组。 权重如下所示:
| 分类器参数 | 权重 |
|---|---|
| MEMBERNAME:USER | 64 |
| MEMBERNAME:ROLE | 32 |
| WLM_LABEL | 16 |
| WLM_CONTEXT | 8 |
| START_TIME/END_TIME | 4 |
MEMBERNAME 参数是必需的。 但是,如果指定的成员名称是数据库用户而不是数据库角色,用户的权重更高,因此选择该分类器。
如果某个用户是多个角色的成员,并且这些角色分配有不同的资源类或者在多个分类器中相匹配,则会为该用户分配最高的资源类。 此行为与现有的资源类分配行为保持一致。
注意
Azure Synapse工作区中的专用 SQL 池与独立专用 SQL 池(以前为 SQL DW)之间的托管标识行为分类不同。 尽管独立专用 SQL 池的托管标识维护分配的标识,但对于 Azure Synapse 工作区,托管标识作为 dbo 运行。 这无法更改。 默认情况下,dbo 角色归为 smallrc 类别。 为 dbo 角色创建分类器后,可将请求分配给 smallrc 外的其他工作负载组。 如果单是 dbo 对于分类来说太过宽泛,并且影响范围较广,可考虑将基于标签、会话或时间的分类与 dbo 角色分类结合使用。
除 smallrc 外,动态资源类都是作为预定义的数据库角色实现的。 Smallrc 不显示为数据库角色,而是 默认资源类。
系统分类器
工作负荷分类采用系统工作负荷分类器。 系统分类器将现有的资源类角色成员身份映射到具有一般重要性的资源类资源分配。 无法删除系统分类器。 若要查看系统分类器,可运行以下查询:
SELECT * FROM sys.workload_management_workload_classifiers where classifier_id <= 12
混合使用资源类分配和分类器
以您的名义创建的系统分类器能够轻松迁移到工作负荷分类。 开始创建具有重要性的新分类器时,使用具有分类优先顺序的资源类角色映射可能会导致错误分类。
假设出现了下面这种情景:
- 现有的数据仓库中已将数据库用户 DBAUser 分配到 largerc 资源类角色。 资源类分配已通过
sp_addrolemember.完成 - 现已使用工作负荷管理更新该数据仓库。
- 为了测试新的分类语法,为数据库角色 DBARole(DBAUser 是其成员)创建了一个分类器,用于将其映射到 mediumrc 和高重要性。
- 当 DBAUser 登录并运行查询时,该查询将分配到 largerc, 因为用户优先于角色成员身份。
为了简化分类错误的排查,我们建议在创建工作负荷分类器时删除资源类角色映射。 以下代码返回现有的资源类角色成员身份。 针对从相应资源类返回的每个成员名称运行 sp_droprolemember 。
SELECT r.name AS [Resource Class]
, m.name AS membername
FROM sys.database_role_members rm
JOIN sys.database_principals AS r ON rm.role_principal_id = r.principal_id
JOIN sys.database_principals AS m ON rm.member_principal_id = m.principal_id
WHERE r.name IN ('mediumrc','largerc','xlargerc','staticrc10','staticrc20','staticrc30','staticrc40','staticrc50','staticrc60','staticrc70','staticrc80');
--for each row returned run in the previous query
EXEC sp_droprolemember '[Resource Class]', membername;
相关内容
- 有关创建分类器的详细信息,请参阅 CREATE WORKLOAD CLASSIFIER (Transact-SQL)。
- 请参阅有关如何创建工作负荷分类器 创建工作负荷分类器的快速入门。
- 请参阅关于如何配置工作负荷重要性及管理和监控工作负荷管理的操作指南文章。
- 请参阅 sys.dm_pdw_exec_requests 以查看查询和分配的重要性。