web-dev-qa-db-ja.com

SQLServerとStateServer for ASP.NETセッション状態のパフォーマンス

私はMS認定の勉強をしていますが、私が行っている模擬テストの1つに、StateServerとは対照的に、SQL Serverにセッションを格納する間のパフォーマンスが競合のポイントであるという疑問があります。

アプリがWebファームで実行されている場合、セッション状態のどのソリューションが最高のパフォーマンス(SQL ServerまたはStateServer)を提供するか、そして最も重要なのはなぜですか?

35
Darko Z

State Serverは、セッションデータをインメモリディクショナリに格納するため、より高速です。 SQL Serverは、データをディスクに保持するデータベースに格納されているため、速度が遅くなります。

すべてが1つのテーブルに格納されるため、SQLサーバーの速度も遅くなります。これは、セッションデータにアクセス/更新するクライアントが増えるにつれて、競合が発生するためです。

SQLサーバーはディスクに永続化され、フェイルオーバー機能を備えたクラスターとしてセットアップできるため、信頼性が高くなります

詳しい説明は この記事 の前文を参照してください。

56
Mark

少しではありますが重要な補足:InProcはファームで使用できません。名前が示すように、InProcは現在のw3wpプロセスで実行され、ファーム間で共有できません。 StateServerはWindowsサービスであるため、StateServerを使用する速度は、stateserverサービスが実行されているマシンの速度に依存します。これはメモリのみです。もちろんSQLはデータを書き込んで取得する必要がありますが、これはおそらくメモリのみよりも低速です。

ここ から:

  • 処理中です。セッション状態のメモリはASP.NETプロセス内に保持されるため、インプロセスは最高のパフォーマンスを発揮します。単一サーバーでホストされているWebアプリケーションの場合、ユーザーが正しいサーバーにリダイレクトされることが保証されているアプリケーション、またはセッション状態データが重要でない場合(再構築または再入力できるという意味で) 、これは選択するモードです。
  • プロセス外です。このモードは、パフォーマンスが重要な場合に最適ですが、ユーザーがアプリケーションをリクエストするサーバーを保証することはできません。アウトプロセスモードでは、メモリからの読み取りのパフォーマンスと、すべてのサーバーの状態を管理する個別のプロセスの信頼性が得られます。
  • SQLサーバー。このモードは、データの信頼性がアプリケーションの安定性の基本である場合に最適です。データベースは障害シナリオに合わせてクラスター化できるためです。パフォーマンスはアウトプロセスほど高速ではありませんが、トレードオフはより高いレベルの信頼性です。
14
Colin

このリンクから: http://www.eggheadcafe.com/articles/20021016.asp

パフォーマンス

  • InProc-最速ですが、セッションデータが多いほど、Webサーバーで消費されるメモリが多くなり、パフォーマンスに影響を与える可能性があります。

  • StateServer-基本タイプ(文字列、整数など)のデータを保存する場合、1つのテスト環境では、InProcよりも15%遅くなります。ただし、大量のオブジェクトを格納している場合は、シリアル化/逆シリアル化のコストがパフォーマンスに影響する可能性があります。独自のシナリオでパフォーマンステストを行う必要があります。

  • SQLServer-基本タイプ(文字列、整数など)のデータを保存する場合、1つのテスト環境では、InProcより25%遅くなります。 StateServerと同じシリアル化に関する警告。

したがって、StateServerは、SQL Serverよりもセッション状態を格納する方が少し高速であるように見えます。

理由については、SQL Serverの方が多目的であり、他の用途にも使用される可能性が高いと思います。それだけでなく、ストレージメカニズムはディスクにあり、StateServerは別のプロセスで実行されているため、ディスクにデータを書き込む必要はなく(仮想メモリで許可されている)、データを他のプロセスのメモリスペースに単に格納しています。

11
Colin Mackay
8
Morteza Jalali