CREATE WORKLOAD GROUP (Transact-SQL)
创建资源调控器工作负荷组并将工作负荷组与资源调控器资源池关联。资源调控器仅在 SQL Server 的 Enterprise Edition、Developer Edition 和 Evaluation Edition 中提供。
语法
CREATE WORKLOAD GROUP group_name
[ WITH
( [ IMPORTANCE = { LOW | MEDIUM | HIGH } ]
[ [ , ] REQUEST_MAX_MEMORY_GRANT_PERCENT = value ]
[ [ , ] REQUEST_MAX_CPU_TIME_SEC = value ]
[ [ , ] REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value ]
[ [ , ] MAX_DOP = value ]
[ [ , ] GROUP_MAX_REQUESTS = value ] )
]
[ USING { pool_name | "default" } ]
[ ; ]
参数
group_name
是工作负荷组的用户定义名称。group_name 由字母数字组成,最多可以包含 128 个字符,在 SQL Server 实例中必须是唯一的,且必须符合针对标识符的规则。IMPORTANCE = { LOW | MEDIUM | HIGH }
指定工作负荷组中某个请求的相对重要性。重要性为下列值之一,默认值为 MEDIUM:LOW
MEDIUM
HIGH
注意 在内部,每个重要性设置都存储为用于计算的一个数字。
IMPORTANCE 对资源池而言是局部性的;同一资源池内重要性不同的工作负荷组会相互影响,但不会影响其他资源池中的工作负荷组。
REQUEST_MAX_MEMORY_GRANT_PERCENT = value
指定单个请求可以从池中获取的最大内存量。此百分比是相对于 MAX_MEMORY_PERCENT 指定的资源池大小而言的。注意 指定的量仅仅指授予查询执行的内存。
value 必须为 0 或正整数。value 的允许范围为 0 到 100。value 的默认设置为 25。
注意以下事项:
将 value 设置为 0,将阻止在用户定义的工作负荷组中运行具有 SORT 和 HASH JOIN 操作的查询。
建议您不要将 value 设置为大于 70,这是因为如果正在运行其他并发查询,则服务器可能无法保留足够的空闲内存。可能最终会导致查询超时错误 8645。
注意 如果查询内存要求超过了此参数指定的限制,服务器会执行以下操作:
对于用户定义的工作负荷组,服务器会尝试降低查询的并行度,直到内存要求降到限制范围以内,或直到并行度等于 1。如果查询内存要求仍然大于限制值,则会发生错误 8657。
对于内部和默认工作负荷组,服务器会允许查询获取必需的内存。
请注意,如果服务器没有足够的物理内存,则这两种情况都会出现超时错误 8645。
有关资源调控器错误消息的详细信息,请参阅资源调控器故障排除。
REQUEST_MAX_CPU_TIME_SEC = value
指定请求可以使用的最长 CPU 时间,以秒为单位。value 必须为 0 或正整数。value 的默认设置为 0,也就是说无限制。注意 如果超过最长时间,资源调控器并不会阻止继续发出请求。但会生成一个事件。有关详细信息,请参阅 CPU Threshold Exceeded 事件类。
REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value
指定查询等待内存授予(工作缓冲区内存)变为可用的最长时间(以秒为单位)。注意 查询并不总是在达到内存授予超时的时候失败。仅当有太多并发查询运行时,查询才失败。否则,查询只能获取最小内存授予,从而导致查询性能下降。
value 必须为 0 或正整数。value 的默认设置为 0,表示使用基于查询开销的内部计算来确定最长时间。
MAX_DOP = value
指定并行请求的最大并行度 (DOP)。value 必须为 0 或正整数。value 的允许范围为 0 到 64。value 的默认设置为 0,表示使用全局设置。按如下方式处理 MAX_DOP:MAX_DOP 作为查询提示时,在未超出工作负荷组 MAX_DOP 时保持有效。
作为查询提示的 MAX_DOP 始终覆盖 SQL Server 2005 中的 sp_configure 'max degree of parallelism'。
工作负荷组 MAX_DOP 覆盖 sp_configure 'max degree of parallelism'。
如果在编译时将查询标记为串行,则在运行时无法更改回并行,不论工作负荷组或 sp_configure 如何设置。
配置 DOP 后,只能在授予内存不足时降低它。工作负荷组重新配置在授予内存队列中等待时不可见。
GROUP_MAX_REQUESTS = value
指定在工作负荷组中允许执行的同时请求最大数。value 必须为 0 或正整数。value 的默认设置为 0,表示允许的请求数不限。USING { pool_name | "default" }
将工作负荷组与由 pool_name 标识的用户定义的资源池关联起来。这实际上是将工作负荷组放入资源池中。如果没有提供 pool_name,或如果没有使用 USING 参数,则将工作负荷组放入预定义的资源调控器默认池。"default" 是保留字,并且在与 USING 一起使用时,必须使用引号 ("") 引起来或用方括号 ([]) 括起来。有关详细信息,请参阅分隔标识符(数据库引擎)。
注意 预定义工作负荷组和资源池都使用小写名称,例如“default”。对于使用区分大小写排序规则的服务器,应当注意这一点。使用不区分大小写排序规则的服务器(例如 SQL_Latin1_General_CP1_CI_AS)会将“default”和“Default”视为相同。
注释
REQUEST_MEMORY_GRANT_PERCENT:在 SQL Server 2005 中,允许索引创建操作使用比最初授予的工作区内存多的工作区内存,以便提高性能。SQL Server 2008 中的资源调控器支持这种特殊的处理方法。然而,最初授予及任何其他内存授予都受资源池和工作负荷组设置的限制。
对分区表创建索引
对非对齐的分区表创建索引所占用的内存与涉及的分区数成正比。如果所需的内存总量超过资源调控器工作负荷组设置为每个查询设定的限制 (REQUEST_MAX_MEMORY_GRANT_PERCENT),则可能无法执行这种索引创建。由于“默认”工作负荷组允许查询超过每个查询的限制,并在开始时使用所需的最低内存以便与 SQL Server 2005 保持兼容,因此,如果“默认”资源池配置了足够多的内存总量以运行此类查询,则用户或许能够在“默认”工作负荷组中运行相同的索引创建。
权限
需要 CONTROL SERVER 权限。
示例
下面的示例演示了如何创建名为 newReports 的工作负荷组。它使用资源调控器默认设置并位于资源调控器默认池中。该示例指定了 default 池,但这并非必需的。
CREATE WORKLOAD GROUP newReports
USING "default" ;
GO