web-dev-qa-db-ja.com

ユーザーのメモリ使用量を制限する

SQL Server 2014を使用しています。テーブルにクエリを実行できるユーザーがいます。問題は、ほとんどの場合、これらのクエリは大量のメモリを使用することです。ユーザーごとにリソースを制限する方法があるかどうか知りたいのですが。

特定のクエリはありません。ユーザーをコントロールしたいだけです。時々彼らはクレイジーなことをします。

5
Hamid Fathi

前述のように、リソースガバナーを使用して、特定のユーザーのメモリ使用量を制限できます。

要約すると、次の手順を実行する必要があります。

  1. リソースプールを作成します。この例では、メモリの最大30%を使用しています。注意してください。

    CREATE RESOURCE POOL UserMemoryPool
    WITH
    ( MIN_MEMORY_PERCENT=0,
    MAX_MEMORY_PERCENT=30)
    GO
    
  2. リソースプールを使用するワークロードグループを作成します。

    CREATE WORKLOAD GROUP UserMemoryGroup
    USING UserMemoryPool;
    GO
    
  3. 分類子関数を定義して、SQL Serverにこのグループに誰が参加するかを通知する必要があります。

    CREATE FUNCTION dbo.UserClassifier() 
    RETURNS SYSNAME WITH SCHEMABINDING
    AS
    BEGIN
        DECLARE @Workload AS SYSNAME
        IF(SUSER_NAME() = 'UserNameToLimit')/*Specify the user*/
            SET @Workload = 'UserMemoryGroup'
        ELSE
            SET @Workload = 'default'
        RETURN @Workload
    END
    GO
    
  4. 最後に、リソースガバナーを有効にします

    USE master
    GO
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.UserClassifier);
    GO
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    

追加情報は MSDNのリソースガバナー にあります。

本番環境で「アドホック」クエリを実行する機能をユーザーに与えないようにしてください。

あなたの声明...

時々彼らはクレイジーなことをします。

...彼らがおそらく何をしているのかしないことを意味します。本番環境でリソースガバナーを有効にすると、本番環境に悪影響を及ぼす可能性があります。

Blitz結果:リソースガバナー有効

リソースガバナーを有効にする必要がある場合は、必ずドキュメントを読み、これがもたらす影響と影響を理解してください。

リソースガバナー(2012) (Microsoft MSDN)

最も簡単な方法は、サーバーへのログイン機能を制限することです。

0