SQL Server 2014を使用しています。テーブルにクエリを実行できるユーザーがいます。問題は、ほとんどの場合、これらのクエリは大量のメモリを使用することです。ユーザーごとにリソースを制限する方法があるかどうか知りたいのですが。
特定のクエリはありません。ユーザーをコントロールしたいだけです。時々彼らはクレイジーなことをします。
前述のように、リソースガバナーを使用して、特定のユーザーのメモリ使用量を制限できます。
要約すると、次の手順を実行する必要があります。
リソースプールを作成します。この例では、メモリの最大30%を使用しています。注意してください。
CREATE RESOURCE POOL UserMemoryPool
WITH
( MIN_MEMORY_PERCENT=0,
MAX_MEMORY_PERCENT=30)
GO
リソースプールを使用するワークロードグループを作成します。
CREATE WORKLOAD GROUP UserMemoryGroup
USING UserMemoryPool;
GO
分類子関数を定義して、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
最後に、リソースガバナーを有効にします
USE master
GO
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.UserClassifier);
GO
ALTER RESOURCE GOVERNOR RECONFIGURE;
追加情報は MSDNのリソースガバナー にあります。
本番環境で「アドホック」クエリを実行する機能をユーザーに与えないようにしてください。
あなたの声明...
時々彼らはクレイジーなことをします。
...彼らがおそらく何をしているのかしないことを意味します。本番環境でリソースガバナーを有効にすると、本番環境に悪影響を及ぼす可能性があります。
リソースガバナーを有効にする必要がある場合は、必ずドキュメントを読み、これがもたらす影響と影響を理解してください。
リソースガバナー(2012) (Microsoft MSDN)
最も簡単な方法は、サーバーへのログイン機能を制限することです。