如何使用资源调控器限制备份压缩的 CPU 使用量 (Transact-SQL)

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

重要说明重要提示

在具体的资源调控器方案中,会话分类可能基于用户名、应用程序名称或者可以区分连接的其他任何因素。 有关详细信息,请参阅编写分类器函数的注意事项资源调控器工作负荷管理方案

本主题包含下面一组方案,将按顺序对它们进行介绍:

  1. 为低优先级操作设置登录名和用户

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

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

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

为低优先级操作设置登录名和用户

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

下面的过程介绍了出于此目的设置登录名和用户的步骤,之后给出了 Transact-SQL 示例“示例 A:设置登录名和用户 (Transact-SQL)”。

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

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

    创建登录名

  2. 还可以选择对此登录名授予 VIEW SERVER STATE。

    有关详细信息,请参阅固定服务器角色的权限(数据库引擎)

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

    创建用户

  4. 要使此登录名和用户的会话可以备份给定数据库,应将此用户添加到该数据库的 db_backupoperator 数据库角色。 对该用户将备份的每个数据库执行此步骤。 还可以选择将该用户添加到其他固定数据库角色。

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

    有关详细信息,请参阅固定数据库角色的权限(数据库引擎)

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

只有当您选择为低优先级备份创建新的 SQL Server 登录名和用户时,下面的示例才对您有意义。 或者,如果存在适当的登录名和用户,也可以使用现有的登录名和用户。

重要说明重要提示

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

本示例为 domain_name\MAX_CPU Windows 帐户创建一个登录名,然后对该登录名授予 VIEW SERVER STATE 权限。 使用此权限,您可以验证登录名的会话的资源调控器分类。 然后本示例为 domain_name\MAX_CPU 创建一个用户,并将它添加到 AdventureWorks 示例数据库的 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 AdventureWorks for this login
USE AdventureWorks;
CREATE USER [domain_name\MAX_CPU] FOR LOGIN [domain_name\MAX_CPU];
EXEC sp_addrolemember 'db_backupoperator', 'domain_name\MAX_CPU';
GO

[返回页首]

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

注意注意

确保资源调控器已启用。 有关详细信息,请参阅如何启用或禁用资源调控器

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

  1. 创建并配置一个资源调控器资源池,发生 CPU 争用时,该资源池将限制分配给资源池中的请求的最大平均 CPU 带宽。

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

  3. 创建一个“分类器函数”,它是一个用户定义函数 (UDF),其返回值供资源调控器用来对会话进行分类,以便将它们路由到适当的工作负荷组。

  4. 将分类器函数注册到资源调控器。

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

注意注意

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

这些步骤的 Transact-SQL 语句在“配置用于限制 CPU 使用的资源调控器”这一步中介绍,该步骤后面给出了此步骤的 Transact-SQL 示例。

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

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

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

    CREATE RESOURCE POOL pool_name WITH ( MAX_CPU_PERCENT = value );

    Value 是 1 到 100 之间的一个整数,它指示最大平均 CPU 带宽的百分比。 实际适合的值取决于具体的环境。 为便于说明,本主题中的示例使用 20% (MAX_CPU_PERCENT = 20)。

  2. 发出一个 CREATE WORKLOAD GROUP 语句,为您要调控其 CPU 使用的低优先级操作创建一个工作负荷组。 此过程的示例使用以下语法:

    CREATE WORKLOAD GROUP group_name USING pool_name;

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

    CREATE FUNCTION [schema_name.]function_name() RETURNS sysname

    WITH SCHEMABINDING

    AS

    BEGIN

    DECLARE @workload\_group\_name AS sysname

    IF (SUSER_NAME() = 'user_of_low_priority_login')

    SET @workload\_group\_name = 'workload_group_name'

    RETURN @workload\_group\_name

    END

    有关该 CREATE FUNCTION 语句的各组成部分的信息,请参阅:

  4. 发出一个 ALTER 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. 将该分类器函数注册到资源调控器。

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

重要说明重要提示

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

-- 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

[返回页首]

验证当前会话的分类 (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)

[返回页首]

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

要在限定了最大 CPU 的会话中创建压缩备份,应当以分类器函数中指定的用户身份登录。 在备份命令中,指定 WITH COMPRESSION (Transact-SQL) 或选择**“压缩备份”** (SQL Server Management Studio)。

创建压缩数据库备份

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

下面的 BACKUP 示例在一个采用新格式的备份文件 Z:\SQLServerBackups\AdvWorksData.bak 中创建 AdventureWorks 数据库的压缩完整备份。

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

[返回页首]