2012-01-13 8 views
1

私は2つの別々のウェブサイトとデータベースを持っています(データベースアクセスのためにLinq-To-SQLを使用するIIS 7.5、ASP.NETとSQL Server 2008)。ウェブサイトのデータベース使用を制限する

データベースに長時間実行される操作(10秒以上)が必要になることがあります。問題は、これらの操作によってsqlserverプロセスが100%CPUに達した後、他の主要な顧客のWebサイトがすぐにデータベースにアクセスできないことです。データベースへのアクセスには若干の遅延があります。

優先度が低いため、2倍または4倍またはnx倍長くかかる管理操作で問題はありません。

IISのAppPoolでCPUリミット設定を使用しようとしましたが、w3wp.exeプロセスでCPUの大部分を使用することはありません...むしろsqlservr.exeです。事前にお寄せいただきありがとうございます!

+0

ちょうど1つのこと - 応答しないでください:長時間実行されている操作に対してSQLを最適化するか、データベース/サーバーを分離して同期するために管理用Webサイトをポイントしてから同期してください。私はすでにそれをやろうとしました。私はむしろ "このクエリを実行するがCPUの最大30%を使用する"という言い方を見つけようとしている。なぜなら、それは頑健性の面で私の問題にとって最良の解決策になるからだ。または、接続文字列で最大CPU使用率を設定することができれば、それは完璧です。 – kape123

+0

IISリソースを制限することがデータベースに影響を及ぼすと思われる理由は何ですか? – Oded

+0

@Oded私は、「IISでAppPoolの使用を制限しようとしました」という回答を避けるために言及しましたが、明らかにコメントでは役に立たない質問が発生する可能性があることを忘れてしまいました。申し訳ありませんが、私の悪い。 – kape123

答えて

1

SQL 2008のSQL Serverに組み込まれているリソースガバナを調べたいような音がします.BOLリンクを開始する必要があります。

http://msdn.microsoft.com/en-us/library/bb933866(v=SQL.100).aspx

基本的に、あなたが定義するリソースプールとワークロードのためのCPUとメモリ使用量を絞ることができます。この調整は、サーバーが負荷を受けている場合にのみ実行されます。ディスクのIO使用率は制御できないことに注意してください。管理データベースのプロセスがIOバウンドで他のDBがドライブを共有している場合は、引き続きパフォーマンスの問題が発生し、データベースを別のスピンドルに移動するか、クエリチューニングが必要になります。あなたの管理者クエリがボックス上のすべてのCPUを消費している場合は、そこにある

/* Classifier function */ 
CREATE FUNCTION dbo.rgov_classifier_db() 
RETURNS sysname 
WITH SCHEMABINDING 
AS 
BEGIN 
    DECLARE @rgWorkloadGrp sysname 
    IF SUSER_SNAME() = 'adminWebsiteDB' 
     SET @rgWorkloadGrp = 'workloadGroupName' 
    ELSE 
     SET @rgWorkloadGrp = 'defaultWorkloadGroupName' 
    RETURN @rgWorkloadGrp 
END; 
GO 
/* Register the function with Resource Governor and then start Resource Governor. */ 
ALTER RESOURCE GOVERNOR 
    WITH (CLASSIFIER_FUNCTION = dbo.rgov_classifier_db); 
GO 
ALTER RESOURCE GOVERNOR RECONFIGURE; 
GO 
+0

リンクありがとうございました...私はすでにいくつかの研究を行ってきましたが、経験豊かな人が特定のDBユーザーを特定のリソースプールに割り当てる方法を教えてくれたら大丈夫です。それは今私が立ち往生しているところです... – kape123

+0

また、リソースガバナーを使用すると、データベース/アプリケーションのパフォーマンスに悪影響を及ぼす可能性がありますか? – kape123

+1

私は多くの経験を積んでいませんが、探しているのは「クラシファイア機能」です。見た目からは普通のUDF以上のものはありませんが、[master] dbで作成する必要があると思います。 – dataGoat

2

:あなたが定義したユーザは、ワークロードグループに基づいて、所望のリソースプールで絞られていることを確認します分類関数の

例チューニングの機会はほぼ確実です。インデックス作成の最適化が可能です。

リソースガバナーの設定が解決されるまでの時間の代わりに、MAXDOPヒントを追加することで、1つのCPUへの影響を短期間で軽減することができますあなたの管理者クエリ:

OPTION (MAXDOP 1); 

はい、それはあなたが少し汚い感じさせるかもしれませんが、あなたのCPUの残りの部分はあなたのより重要なクエリ上で動作するように解放されます。

実際の回答は管理者のクエリを調整することです。長い間実行しても大丈夫だからといって、サーバーやユーザーの操作には良いことではありません。遅いI/Oを補う高CPUを経験している場合は、ボックス上で実行される他のクエリの影響から完全に分離することはできません。 I/Oにはリソースガバナーにはノブがありません。CPUとメモリのみを制御できますが、100%ではありません。

+0

ありがとうあなたの応答のためにアーロン。私は、その分類子関数を設定し、適切なグループに私のSQLユーザーを割り当てることができた...しかし、私はまだCPU使用率の100%を参照してください。私が読んだところでは、リソースガバナーは、リソースと競合していない限り、キックオフされないことを理解しています...しかし、私はそれを必要としません - 常にCPU使用率の50%に制限する必要があります。ワークロードグループの「並列度」を1(0ではなく)に設定すると役立ちますか? – kape123

+0

私は持っている4つのコアマシンに2つの作品が完璧です;;)問題解決! – kape123

+1

他の誰もこのボックスを使用していないのに、なぜCPUを50%に制限する必要がありますか?それはクエリをチューニングするという目標です(クエリはボックスの100%を占めるべきではありません)が、誰も必要としていないときにマシンの半分をアイドル状態にするのはなぜですか?リソースガバナー*は、2人目のユーザーが立ち上がって何かをしようとするときにキックオフされます。 –

関連する問題