次の方法で共有


リソース ガバナーを使用してバックアップ圧縮による CPU 使用率を制限する (Transact-SQL)

既定では、圧縮を使用してバックアップすると CPU 使用率が大幅に増加し、圧縮プロセスによって消費される追加の CPU が同時操作に悪影響を与える可能性があります。 そのため、CPU の競合が発生したときにリソース ガバナー によって CPU 使用率が制限されるセッションで、優先順位の低い圧縮バックアップを作成できます。 このトピックでは、特定の SQL Server ユーザーのセッションを、このような場合の CPU 使用率を制限する Resource Governor ワークロード グループにマッピングすることによって分類するシナリオについて説明します。

重要

特定の Resource Governor シナリオでは、セッション分類は、ユーザー名、アプリケーション名、または接続を区別できるその他のものに基づく場合があります。 詳細については、「 リソース ガバナー分類子関数 」および 「Resource Governor ワークロード グループ」を参照してください。

このトピックには、次の一連のシナリオが含まれています。これらは順番に示されています。

  1. Low-Priority 操作のログインとユーザーの設定

  2. CPU 使用率を制限するためのリソース ガバナーの構成

  3. 現在のセッションの分類の検証 (Transact-SQL)

  4. CPU が制限されたセッションを使用したバックアップの圧縮

Low-Priority 操作のログインとユーザーの設定

このトピックのシナリオでは、優先順位の低い SQL Server ログインとユーザーが必要です。 ユーザー名は、ログインで実行されているセッションを分類し、CPU 使用率を制限する Resource Governor ワークロード グループにルーティングするために使用されます。

次の手順では、この目的でログインとユーザーを設定する手順について説明し、その後に 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 のユーザーを作成しdb_backupoperator AdventureWorks2012 サンプル データベースの固定データベース ロールに追加します。 このユーザー名は、Resource Governor 分類子関数によって使用されます。

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

[上]

CPU 使用率を制限するためのリソース ガバナーの構成

リソース ガバナーが有効になっていることを確認します。 詳細については、「 リソース ガバナーを有効にする」を参照してください。

この Resource Governor シナリオでは、構成は次の基本的な手順で構成されます。

  1. CPU 競合が発生したときにリソース プール内の要求に与えられる最大平均 CPU 帯域幅を制限する Resource Governor リソース プールを作成して構成します。

  2. このプールを使用する Resource Governor ワークロード グループを作成して構成します。

  3. 分類子関数を作成します。これはユーザー定義関数 (UDF) であり、その戻り値は、セッションを分類するために Resource Governor によって使用され、適切なワークロード グループにルーティングされます。

  4. 分類子関数をリソース ガバナーに登録します。

  5. リソース ガバナーのメモリ内構成に変更を適用します。

Resource Governor リソース プール、ワークロード グループ、および分類の詳細については、「 リソース ガバナー」を参照してください。

これらの手順の Transact-SQL ステートメントについては、「CPU 使用率を制限するためにリソース ガバナーを構成するには」の手順で説明します。その後に、手順の Transact-SQL 例を示します。

リソース ガバナーを構成するには (SQL Server Management Studio)

CPU 使用率を制限するように Resource Governor を構成するには (Transact-SQL)

  1. CREATE RESOURCE POOL ステートメントを発行してリソース プールを作成します。 この手順の例では、次の構文を使用します。

    リソース プール pool_name を作成する WITH ( MAX_CPU_PERCENT = value );

    は、最大平均 CPU 帯域幅の割合を示す 1 から 100 までの整数です。 適切な値は、環境によって異なります。 図の目的上、このトピックの例では 20%% (MAX_CPU_PERCENT = 20) を使用します。

  2. CREATE WORKLOAD GROUP ステートメントを発行して、CPU 使用率を管理する優先順位の低い操作用のワークロード グループを作成します。 この手順の例では、次の構文を使用します。

    pool_nameを使用してワークロード グループ group_nameを作成する。

  3. CREATE FUNCTION ステートメントを発行して、前の手順で作成したワークロード グループを優先度の低いログインのユーザーにマップする分類子関数を作成します。 この手順の例では、次の構文を使用します。

    CREATE 関数 [schema_name.]function_name() RETURNS sysname

    SCHEMABINDING を使用する

    という形で

    開始

    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. 次のように、2 つ目の ALTER RESOURCE GOVERNOR ステートメントを発行して、リソース ガバナーのメモリ内構成に変更を適用します。

    ALTER RESOURCE GOVERNOR RECONFIGURE;  
    

例 B: リソース ガバナーの構成 (Transact-SQL)

次の例では、1 つのトランザクション内で次の手順を実行します。

  1. pMAX_CPU_PERCENT_20 リソース プールを作成します。

  2. gMAX_CPU_PERCENT_20ワークロード グループを作成します。

  3. 前の例で作成したユーザー名を使用する、 rgclassifier_MAX_CPU() 分類子関数を作成します。

  4. 分類子関数をリソース ガバナーに登録します。

この例では、トランザクションをコミットした後、ALTER WORKLOAD GROUP ステートメントまたは ALTER RESOURCE POOL ステートメントで要求された構成変更を適用します。

重要

次の例では、「例 A: ログインとユーザーの設定 (Transact-SQL)」domain_name\MAX_CPUで作成したサンプル 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  
  

[上]

現在のセッションの分類の検証 (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  

結果ウィンドウの 名前 列には、分類子関数で指定したワークロード グループ名の 1 つ以上のセッションが一覧表示されます。

この 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) を選択します。 圧縮されたデータベース バックアップを作成するには、「 データベースの完全バックアップの作成 (SQL Server)」を参照してください。

例 C: 圧縮バックアップの作成 (Transact-SQL)

次の BACKUP の例では、AdventureWorks2012 データベースの圧縮された完全バックアップを新しくフォーマットされたバックアップ ファイル ( Z:\SQLServerBackups\AdvWorksData.bak) に作成します。

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

[上]

こちらもご覧ください

分類子 User-Defined 関数を作成してテストする
リソース ガバナー