使用资源调控器通过备份压缩限制 CPU 使用率(Transact-SQL)

默认情况下,使用压缩进行备份会显著增加 CPU 使用率,压缩进程消耗的额外 CPU 可能会对并行操作产生不利影响。 因此,你可能希望在 CPU 争用时受资源调控器 限制的会话中创建低优先级压缩备份。 本主题演示了一种方案,该方案通过将会话映射到限制此类情况下 CPU 使用率的资源调控器工作负荷组来对特定 SQL Server 用户的会话进行分类。

重要

在给定的资源调控器方案中,会话分类可能基于用户名、应用程序名称或可以区分连接的其他任何内容。 有关详细信息,请参阅 资源调控器分类器函数 和资源 调控器工作负荷组

本主题包含以下一组方案,这些方案按顺序显示:

  1. 设置 Low-Priority 操作的登录名和用户

  2. 配置资源调控器以限制 CPU 使用率

  3. 验证当前会话的分类(Transact-SQL)

  4. 使用具有有限 CPU 的会话压缩备份

为Low-Priority操作设置登录和用户

本主题中的方案需要低优先级 SQL Server 登录名和用户。 用户名将用于对登录名中运行的会话进行分类,并将其路由到限制 CPU 使用率的资源调控器工作负荷组。

以下过程描述了为此设置登录名和用户的步骤,后跟 Transact-SQL 示例“示例 A: 设置登录名和用户(Transact-SQL)。”

设置用于对会话进行分类的登录名和数据库用户

  1. 创建用于创建低优先级压缩备份的 SQL Server 登录名。

    创建登录名

  2. 可选地授予此登录名 VIEW SERVER STATE。

    有关详细信息,请参阅 GRANT 数据库主体权限(Transact-SQL)。

  3. 为此登录名创建 SQL Server 用户。

    创建用户

  4. 为了使该登录和用户能够备份指定的数据库,请将该用户添加到该数据库的 db_backupoperator 数据库角色中。 对此用户将备份的每个数据库执行此操作。 (可选)将用户添加到其他固定数据库角色。

    将用户添加到固定数据库角色

    有关详细信息,请参阅 GRANT 数据库主体权限(Transact-SQL)。

示例 A:设置登录名和用户(Transact-SQL)

仅当选择创建新的 SQL Server 登录名和用户进行低优先级备份时,以下示例才相关。 或者,如果存在适当的登录名,则可以使用现有登录名和用户。

重要

以下示例使用示例登录名和用户名, domain_name\MAX_CPU。 将这些名称替换为在创建低优先级压缩备份时计划使用的 SQL Server 登录名和用户的名称。

此示例为 domain_name\MAX_CPU Windows 帐户创建登录名,然后授予对登录名的 VIEW SERVER STATE 权限。 通过此权限,可以验证登录会话的资源调控器分类。 然后,该示例创建 domain_name\MAX_CPU 用户,并将其添加到 AdventureWorks2012 示例数据库的db_backupoperator固定数据库角色。 资源调控器分类器函数将使用此用户名。

-- Create a SQL Server login for low-priority operations  
USE master;  
CREATE LOGIN [domain_name\MAX_CPU] FROM WINDOWS;  
GRANT VIEW SERVER STATE TO [domain_name\MAX_CPU];  
GO  
-- Create a SQL Server user in AdventureWorks2012 for this login  
USE AdventureWorks2012;  
CREATE USER [domain_name\MAX_CPU] FOR LOGIN [domain_name\MAX_CPU];  
EXEC sp_addrolemember 'db_backupoperator', 'domain_name\MAX_CPU';  
GO  
  

[Top]

配置资源调控器以限制 CPU 使用率

注释

确保已启用资源调控器。 有关详细信息,请参阅 “启用资源调控器”。

在此资源调控器方案中,配置包括以下基本步骤:

  1. 创建并配置资源调控器资源池,用于限制在发生 CPU 争用时提供给资源池中请求的最大平均 CPU 带宽。

  2. 创建并配置使用此池的资源调控器工作负荷组。

  3. 创建 分类器函数,它是用户定义的函数(UDF),其返回值由 Resource Governor 用于对会话进行分类,以便将其路由到适当的工作负荷组。

  4. 将分类器函数注册到 Resource Governor。

  5. 将更改应用于资源调控器内存中配置。

注释

有关资源调控器资源池、工作负荷组和分类的信息,请参阅 资源调控器

这些步骤的 Transact-SQL 语句在过程“配置资源调控器以限制 CPU 使用率”过程中介绍,后跟过程 Transact-SQL 示例。

配置资源调控器(SQL Server Management Studio)

配置资源调控器以限制 CPU 使用率(Transact-SQL)

  1. 发出 CREATE RESOURCE POOL 语句以创建资源池。 此过程的示例使用以下语法:

    创建资源池 pool_name 使用 ( MAX_CPU_PERCENT = value );

    值为 1 到 100 之间的整数,指示最大平均 CPU 带宽百分比。 适当的值取决于你的环境。 为了说明,本主题中的示例使用 20%% (MAX_CPU_PERCENT = 20.

  2. 执行 CREATE WORKLOAD GROUP 语句,为低优先级的操作相关创建一个用于控制其 CPU 使用率的工作负荷组。 此过程的示例使用以下语法:

    使用 pool_name 创建工作负荷组group_name;

  3. 发出 CREATE FUNCTION 语句以创建一个分类器函数,该函数将上一步中创建的工作负荷组映射到低优先级登录的用户。 此过程的示例使用以下语法:

    CREATE FUNCTION [schema_name.]function_name() RETURNS sysname

    WITH SCHEMABINDING

    AS

    开始

    DECLARE @workload_group_name AS sysname

    IF (SUSER_NAME() = 'user_of_low_priority_login')

    SET @workload_group_name = “workload_group_name

    返回 @workload_group_name

    结束

    有关此 CREATE FUNCTION 语句的各组件的信息,请参阅:

  4. 发出 ALTER RESOURCE GOVERNOR 语句,将分类器函数注册到 Resource Governor。 此过程的示例使用以下语法:

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = schema_name.function_name);

  5. 发出第二个 ALTER RESOURCE GOVERNOR 语句,以将更改应用到资源调控器内存中配置,如下所示:

    ALTER RESOURCE GOVERNOR RECONFIGURE;  
    

示例 B:配置资源调控器(Transact-SQL)

以下示例在单个事务中执行以下步骤:

  1. 创建pMAX_CPU_PERCENT_20资源池。

  2. 创建gMAX_CPU_PERCENT_20工作负荷组。

  3. rgclassifier_MAX_CPU()创建分类器函数,该函数使用在前面的示例中创建的用户名。

  4. 将分类器函数注册到 Resource Governor。

提交事务后,该示例应用 ALTER WORKLOAD GROUP 或 ALTER RESOURCE POOL 语句中请求的配置更改。

重要

以下示例使用在“示例 A: 设置登录名和用户(Transact-SQL),”\MAX_CPUdomain_name中创建的示例 SQL Server 用户的用户名。 请将此名称替换为你计划用于创建低优先级压缩备份的登录名。

-- Configure Resource Governor.  
BEGIN TRAN  
USE master;  
-- Create a resource pool that sets the MAX_CPU_PERCENT to 20%.   
CREATE RESOURCE POOL pMAX_CPU_PERCENT_20  
   WITH  
      (MAX_CPU_PERCENT = 20);  
GO  
-- Create a workload group to use this pool.   
CREATE WORKLOAD GROUP gMAX_CPU_PERCENT_20  
USING pMAX_CPU_PERCENT_20;  
GO  
-- Create a classification function.  
-- Note that any request that does not get classified goes into   
-- the 'Default' group.  
CREATE FUNCTION dbo.rgclassifier_MAX_CPU() RETURNS sysname   
WITH SCHEMABINDING  
AS  
BEGIN  
    DECLARE @workload_group_name AS sysname  
      IF (SUSER_NAME() = 'domain_name\MAX_CPU')  
          SET @workload_group_name = 'gMAX_CPU_PERCENT_20'  
    RETURN @workload_group_name  
END;  
GO  
  
-- Register the classifier function with Resource Governor.  
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_MAX_CPU);  
COMMIT TRAN;  
GO  
-- Start Resource Governor  
ALTER RESOURCE GOVERNOR RECONFIGURE;  
GO  
  

[Top]

验证当前会话的分类(Transact-SQL)

(可选)以你在分类器函数中指定的用户身份登录,并在对象资源管理器中发出以下 SELECT 语句来验证会话分类:

USE master;  
SELECT sess.session_id, sess.login_name, sess.group_id, grps.name   
FROM sys.dm_exec_sessions AS sess   
JOIN sys.dm_resource_governor_workload_groups AS grps   
    ON sess.group_id = grps.group_id  
WHERE session_id > 50;  
GO  

在结果窗格中, 名称 列应列出你在分类器函数中指定的工作负荷组名称的一个或多个会话。

注释

有关此 SELECT 语句调用的动态管理视图的信息,请参阅sys.dm_exec_sessions(Transact-SQL)sys.dm_resource_governor_workload_groups(Transact-SQL)。

[Top]

使用具有有限 CPU 的会话压缩备份

若要在具有有限最大 CPU 的会话中创建压缩备份,请以分类器函数中指定的用户身份登录。 在备份命令中,指定 WITH COMPRESSION(Transact-SQL)或选择 “压缩备份 ”(SQL Server Management Studio)。 若要创建压缩的数据库备份,请参阅“创建完整数据库备份”(SQL Server)。

示例 C:创建压缩备份(Transact-SQL)

以下 BACKUP 示例使用新格式化的备份文件 Z:\SQLServerBackups\AdvWorksData.bak创建 AdventureWorks2012 数据库的压缩完整备份。

--Run backup statement in the gBackup session.  
BACKUP DATABASE AdventureWorks2012 TO DISK='Z:\SQLServerBackups\AdvWorksData.bak'   
WITH   
   FORMAT,   
   MEDIADESCRIPTION='AdventureWorks2012 Compressed Data Backups'  
   DESCRIPTION='First database backup on AdventureWorks2012 Compressed Data Backups media set'  
   COMPRESSION;  
GO  

[Top]

另请参阅

创建和测试分类器 User-Defined 函数
资源调控器