资源调控器概念
下面的三个概念是了解和使用资源调控器的基础:
资源池。 当安装 SQL Server 2008 时,会创建两个资源池(内部资源池和默认资源池)。资源调控器还支持用户定义的资源池。
工作负荷组。 当安装 SQL Server 2008 时,会创建两个工作负荷组(内部工作负荷组和默认工作负荷组)并将其映射到对应的资源池。资源调控器还支持用户定义的工作负荷组。
分类。 存在用于对传入请求进行分类并将它们路由到工作负荷组的内部规则。资源调控器还支持用于实现分类规则的分类器用户定义的函数。
注意 |
---|
资源调控器不向专用管理员连接 (DAC) 施加任何控制。无需对在内部工作负荷组和资源池中运行的 DAC 查询进行分类。 |
在资源调控器的上下文中,您可以将前面的概念视为组件。下图显示了这些组件及其在数据库引擎环境中相互之间的关系。从处理的角度,简化的流程如下所示:
会话有传入的连接(Session 1,共 n 个)。
会话已分类(分类)。
会话工作负荷将路由到工作负荷组,例如,Group 4。
工作负荷组使用与其关联的资源池,例如,Pool 2。
资源池提供并限制应用程序所需的资源,例如,Application 3。
资源池
资源池或池表示服务器的物理资源。您可以将池看作 SQL Server 实例内部的一个虚拟 SQL Server 实例。
池有两个部分。一部分不与其他池重叠,这使得资源预留最少。另一部分与其他池共享,支持最大可能的资源消耗。在此版本的资源调控器中,通过为每个资源指定下列项之一来设置池资源:
CPU 的 MIN 或 MAX
内存的 MIN 或 MAX
对于每个这种资源,MIN 表示池的最少保证可用资源,MAX 表示池的最大大小。
所有池的 MIN 值之和不能超过服务器资源的 100%。MAX 值可以设置为 MIN 和 100% 之间(包括 100%)的范围内的任何值。
如果为某池定义了非零 MIN,则其他池的有效 MAX 值将重新调整为以下两者中的最小值:为该池配置的 MAX 值;从 100% 中减去其他池的 MIN 值之和。
下表说明了上述概念。该表显示了内部池、默认池和两个用户定义池的设置。下面的公式用于计算有效 MAX 百分比和共享百分比。
Min(X,Y) 表示 X 和 Y 中的较小值。
Sum(X) 表示所有池的 X 值之和。
总计共享百分比 = 100 - sum(MIN %)。
有效 MAX 百分比 = min(X,Y)。
共享百分比 = 有效 MAX 百分比 - MIN 百分比。
池名称 |
MIN 百分比设置 |
MAX 百分比设置 |
计算的有效 MAX 百分比 |
计算的共享百分比 |
注释 |
---|---|---|---|---|---|
内部 |
0 |
100 |
100 |
0 |
有效 MAX 百分比和共享百分比不适用于内部池。 |
默认 |
0 |
100 |
30 |
30 |
有效 MAX 值的计算如下:min(100,100-(20+50)) = 30。计算的共享百分比为有效 MAX - MIN = 30。 |
池 1 |
20 |
100 |
50 |
30 |
有效 MAX 值计算如下:min(100,100-50) = 50。计算的共享百分比为有效 MAX - MIN = 30。 |
池 2 |
50 |
70 |
70 |
20 |
有效 MAX 值计算如下:min(70,100-20) = 70。计算的共享百分比为有效 MAX - MIN = 20。 |
以上表为示例,我们可以进一步说明创建其他池时进行的调整。此池为池 3,MIN 百分比设置为 5。
池名称 |
MIN 百分比设置 |
MAX 百分比设置 |
计算的有效 MAX 百分比 |
计算的共享百分比 |
注释 |
---|---|---|---|---|---|
内部 |
0 |
100 |
100 |
0 |
有效 MAX 百分比和共享百分比不适用于内部池。 |
默认 |
0 |
100 |
25 |
25 |
有效 MAX 值计算如下:min(100,100-(20+50+5)) = 25。计算的共享百分比为有效 MAX - MIN = 25。 |
池 1 |
20 |
100 |
45 |
25 |
有效 MAX 值计算如下:min (100,100-55) = 45。计算的共享百分比为有效 MAX - MIN = 25。 |
池 2 |
50 |
70 |
70 |
20 |
有效 MAX 值计算如下:min(70,100-25) = 70。计算的共享百分比为有效 MAX - MIN = 20。 |
池 3 |
5 |
100 |
30 |
25 |
有效 MAX 值计算如下:min(100,100-70) = 30。计算的共享百分比为有效 MAX - MIN = 25。 |
池的共享部分用于指示在有可用资源时,可用资源的流向。但是,在消耗资源时,资源流向指定的池,不能共享。这在给定池中没有请求并且为该池指定的资源可以释放到其他池时,能够提高资源使用率。
池配置的某些极特殊情况是:
所有池定义的最小值的总计表示 100% 的服务器资源。在这种情况下,有效最大值等于最小值。这等于将服务器资源划分为无重叠部分,而不考虑任何指定池内的资源消耗情况。
所有池的最小值为零。所有池竞争使用可用资源,其最终大小基于各个池消耗的资源。其他因素(如策略)也对调整最终池大小起作用。
资源调控器预定义两个资源池:内部池和默认池。
内部池
内部池表示由 SQL Server 自身消耗的资源。这个池始终只包含内部组,在任何情况下都不允许更改池。不限制内部池的资源消耗。池中的所有工作负荷均视为服务器函数的关键内容,资源调控器允许内部池在与其他池的限制发生冲突时争用资源。
注意 |
---|
不从总体资源使用情况中减去内部池和内部组资源使用情况。使用可用的总体资源计算百分比。 |
默认池
默认的池是第一个预定义的用户池。在进行任何配置之前,默认池只包含默认组。不能创建或删除默认池,但可以更改。默认池除了包含默认组,还可以包含用户定义的组。
注意 |
---|
可以更改默认组,但不能从默认池中移出。 |
用户定义的资源池
资源调控器提供用于创建、更改和删除资源池的 DDL 语句。有关详细信息,请参阅资源调控器 DDL 和系统视图。
工作负荷组
工作负荷组是会话请求的容器,根据应用于每个请求的分类标准这些会话被认为是相似的。利用工作负荷组可对资源占用进行聚合监视并可将统一策略应用至组中的所有请求。组为其成员定义策略。
注意 |
---|
用户定义的工作负荷组可以从一个资源池移动到另一个资源池。 |
资源调控器预定义了两个工作负荷组:内部组和默认组。用户无法更改任何已归入内部组类的请求,但可以对其进行监视。当满足下列条件时,请求会被归入默认组类:
没有用于对请求进行分类的标准。
曾经尝试将请求归入不存在的组类。
存在常规性的分类错误。
资源调控器还提供了用于创建、更改和删除工作负荷组的 DDL 语句。有关详细信息,请参阅资源调控器 DDL 和系统视图。
分类
资源调控器支持对传入会话的分类。分类基于函数中包含的一组用户编写的条件。函数逻辑的结果使资源调控器可以将会话归入现有工作负荷组类。
注意 |
---|
内部工作负荷组中填入的是仅供内部使用的请求。您不能更改用于路由这些请求的标准,也不能将请求归入内部工作负荷组类。 |
您可以编写一个标量函数,在其中包含用于将传入会话分配给工作负荷组的逻辑。必须先完成下列操作,才能使用此函数:
使用 ALTER RESOURCE GOVERNOR 语句创建并注册此函数。有关详细信息,请参阅 ALTER RESOURCE GOVERNOR (Transact-SQL)。
使用带 RECONFIGURE 参数的 ALTER RESOURCE GOVERNOR 语句更新资源调控器配置。
创建此函数并应用配置更改后,资源调控器分类器将使用此函数返回的工作负荷组名称将新请求发送到相应的工作负荷组。
重要提示 |
---|
如果分类函数没有在指定的登录超时内完成,则客户端会话将超时。登录超时是客户端属性,因此服务器意识不到超时。长时间运行的分类器函数可使服务器长期保留孤立连接。创建在连接超时之前完成其执行的分类器函数非常重要。 |
用户定义的函数具有以下特征和行为:
将针对每个新会话评估用户定义函数,即使在启用了连接池的情况下也会这样做。
用户定义的函数为会话提供工作负荷组上下文。确定组成员身份后,此会话将在会话的整个生存期内一直绑定到工作负荷组。
如果用户定义的函数返回默认值 NULL 或不存在的组名称,则会话将拥有默认工作负荷组上下文。如果由于任何原因而导致函数失败,则会话也将拥有默认上下文。
函数应在服务器范围(master 数据库)内定义。
分类器用户定义的函数的指定只在执行 ALTER RESOURCE GOVERNOR RECONFIGURE 时生效。
一次只能将一个用户定义的函数指定为分类器。
除非删除分类器用户定义函数的分类器状态,否则不能删除或更改分类器用户定义的函数。
如果缺少分类器用户定义的函数,则将所有会话归入默认组类。
分类器函数返回的工作负荷组位于架构绑定限制的作用域之外。例如,不能删除表,但可以删除工作负荷组。
重要提示 |
---|
建议在服务器上启用专用管理员连接 (DAC)。DAC 不进行资源调控器分类,因此可用于监视分类器函数并排除其故障。有关详细信息,请参阅使用专用管理员连接。如果没有 DAC 可用来进行故障排除,则另一个选择是在单用户模式下重新启动系统。虽然单用户模式不进行分类,但是它使您无法在资源调控器分类运行时对它进行诊断。 |
分类过程
在资源调控器上下文中,会话的登录过程包含下列步骤:
登录身份验证
LOGON 触发器执行
分类
分类启动时,资源调控器执行分类器函数,并使用函数返回的值将请求发送到相应的工作负荷组。有关详细信息,请参阅编写分类器函数的注意事项。
注意 |
---|
在 sys.dm_exec_sessions 和 sys.dm_exec_requests 中显示有关分类器函数和 LOGON 触发器的执行的信息。 |