Compartir a través de

将资源类转换为工作负荷组

工作量组提供一种隔离和控制系统资源的机制。 此外,工作负荷组允许为在其中运行的请求设置执行规则。 查询超时执行规则允许在无需用户主动干预的情况下取消超过预设运行时间的查询。 本文介绍如何采用现有资源类并创建具有类似配置的工作负荷组。 此外,还添加了可选的查询超时规则。

注释

有关同时使用工作负荷组和资源类的指导,请参阅工作负荷分类概念文档中的“混合资源类分配与分类器”部分。

了解现有资源类配置

工作负荷组需要一个调用 REQUEST_MIN_RESOURCE_GRANT_PERCENT 的参数,该参数指定每个请求分配的总体系统资源的百分比。 通过分配并发槽位来为资源类进行资源分配。 若要确定为 REQUEST_MIN_RESOURCE_GRANT_PERCENT 指定的值,请使用 sys.dm_workload_management_workload_groups_stats DMV。 例如,下面的查询返回一个值,该值可用于 REQUEST_MIN_RESOURCE_GRANT_PERCENT 参数创建类似于 staticrc40 的工作负荷组。

SELECT Request_min_resource_grant_percent = Effective_request_min_resource_grant_percent
  FROM sys.dm_workload_management_workload_groups_stats
  WHERE name = 'staticrc40'

注释

工作负荷组基于整个系统资源的百分比运行。

由于工作负荷组基于整体系统资源的百分比运行,因此在规模增减时,分配给静态资源类别的资源百分比相对于整个系统资源发生变化。 例如,DW1000c 上的 staticrc40 会分配到 19.2% 的总体系统资源。 在 DW2000c,则会分配 9.6%。 如果你希望通过增加并发性来进行扩展,而不是为每个请求分配更多资源,那么这个模型是类似的。

创建工作负荷组

使用已知 REQUEST_MIN_RESOURCE_GRANT_PERCENT,可以使用 CREATE WORKLOAD GROUP 语法创建工作负荷组。 可以选择指定大于零的一个 MIN_PERCENTAGE_RESOURCE ,以隔离工作负荷组的资源。 此外,可以选择指定 CAP_PERCENTAGE_RESOURCE 小于 100 来限制工作负荷组可以使用的资源量。

下面的代码使用 mediumrc 作为一个示例的基础,将 MIN_PERCENTAGE_RESOURCE 设置为提供 10% 的系统资源专供 wgDataLoads 使用,并保证一个查询始终都能够运行。 此外, CAP_PERCENTAGE_RESOURCE 设置为 40%,并将此工作负荷组限制为四个并发请求。 通过将参数设置为 QUERY_EXECUTION_TIMEOUT_SEC 3600,将自动取消运行超过 1 小时的查询。

CREATE WORKLOAD GROUP wgDataLoads WITH  
( REQUEST_MIN_RESOURCE_GRANT_PERCENT = 10
 ,MIN_PERCENTAGE_RESOURCE = 10
 ,CAP_PERCENTAGE_RESOURCE = 40
 ,QUERY_EXECUTION_TIMEOUT_SEC = 3600)

创建分类器

以前,查询与资源类的映射是通过 sp_addrolemember 完成的。 若要实现相同的功能并将请求映射到工作负荷组,请使用 CREATE WORKLOAD CLASSIFIER 语法。 使用sp_addrolemember仅允许根据登录名将资源映射到请求。 分类器除了登录以外还提供其他选项,例如: - 标签 - 会话 - 时间 下面的例子将来自 AdfLogin 登录的查询,并且将 OPTION LABEL 设置为 factloads 的查询,分配给上面创建的工作负荷组 wgDataLoads

CREATE WORKLOAD CLASSIFIER wcDataLoads WITH  
( WORKLOAD_GROUP = 'wgDataLoads'
 ,MEMBERNAME = 'AdfLogin'
 ,WLM_LABEL = 'factloads')

使用示例查询进行测试

下面是示例查询和 DMV 查询,以确保正确配置工作负荷组和分类器。

SELECT SUSER_SNAME() --should be 'AdfLogin'

--change to a valid table AdfLogin has access to
SELECT TOP 10 *
  FROM nation
  OPTION (label='factloads')

SELECT request_id, [label], classifier_name, group_name, command
  FROM sys.dm_pdw_exec_requests
  WHERE [label] = 'factloads'
  ORDER BY submit_time DESC

后续步骤