资源调控器分类器函数

SQL Server 资源调控器分类过程根据会话的特征将传入会话分配给工作负荷组。 可以通过编写用户定义的函数(称为分类器函数)来定制分类逻辑。

分类

资源调控器支持传入会话的分类。 分类基于函数中包含的一组用户写入的条件。 函数逻辑的结果使 Resource Governor 能够将会话分类到现有工作负载组中。

注释

内部工作负荷组包含仅供内部使用的请求。 不能更改用于路由这些请求的条件,并且无法将请求分类到内部工作负荷组中。

可以编写一个标量函数,其中包含用于将传入会话分配给工作负荷组的逻辑。 在使用此函数之前,必须完成以下作:

  • 使用 ALTER RESOURCE GOVERNOR 语句创建和注册函数。 有关详细信息,请参阅 ALTER RESOURCE GOVERNOR (Transact-SQL)

  • 使用 ALTER RESOURCE GOVERNOR 语句和 RECONFIGURE 参数更新资源调控器配置。

创建函数并应用配置更改后,Resource Governor 分类器将使用函数返回的工作负荷组名称将新请求发送到相应的工作负荷组。

重要

如果分类函数未在登录的指定超时时间内完成,则客户端会话可能会超时。 登录超时是客户端的一个属性,因此服务器并不了解超时。长时间运行的分类器函数可能导致服务器长时间保持孤立连接。 请务必创建在连接超时之前完成执行的分类器函数。

用户定义的函数具有以下特征和行为:

  • 即使启用了连接池,也会为每个新会话评估用户定义的函数。

  • 用户定义的函数为会话提供工作负荷组上下文。 确定组成员身份后,整个会话期间会话都将绑定到工作负荷组。

  • 如果用户定义函数返回 NULL、默认值或不存在的组的名称,则会话将给定默认工作负荷组上下文。 如果函数因任何原因而失败,则会话也会获得默认上下文。

  • 应使用服务器范围(master 数据库)定义函数。

  • 分类器用户定义的函数指定仅在执行 ALTER RESOURCE GOVERNOR RECONFIGURE 后生效。

  • 一次只能将一个用户定义的函数指定为分类器。

  • 除非删除分类器状态,否则无法删除或更改分类器用户定义函数。

  • 如果没有分类器用户定义函数,则所有会话都分类为默认组。

  • 分类器函数返回的工作负荷组超出了架构绑定限制的范围。 例如,不能删除表,但可以删除工作负荷组。

重要

建议在服务器上启用专用管理员连接(DAC)。 DAC 不受资源调控器分类的约束,可用于监视分类器函数并对其进行故障排除。 有关详细信息,请参阅 数据库管理员的诊断连接。 如果 DAC 无法进行故障排除,另一个选项是在单用户模式下重启系统。 尽管单用户模式不属于分类,但它无法让你在资源管理器正在运行时诊断其分类。

分类过程

在 Resource Governor 的上下文中,会话的登录过程包括以下步骤:

  1. 登录身份验证

  2. LOGON 触发器执行

  3. 分类

分类启动时,资源调控器执行分类器函数,并使用函数返回的值将请求发送到相应的工作负荷组。

注释

有关分类器函数和 LOGON 触发器的执行的信息在 sys.dm_exec_sessionssys.dm_exec_requests中公开。

分类函数任务

任务说明 主题
介绍如何创建和测试分类器用户定义函数。 创建和测试分类器 User-Defined 函数

另请参阅

资源调控器
启用资源调控器
资源调控器资源池
资源调控器工作负荷组
使用模板配置资源调控器
查看资源调控器属性