私はサービスとして提供したいウェブサイトを作成しています。各顧客には独自のデータベースがあり、各サイトには2つのデータベースが必要です。私が100人のアクティブな顧客を抱えていて、彼らがすべて自分のサイトで働いているなら、私は200の別個の接続文字列を持つことができます。SQL接続が多すぎる場合は、どのようにしたらわかりますか?
どのくらいの数があまりにも多いのですか?私は問題に遭遇するまで待たずに、事前に計画していきたいと思っています。
私はサービスとして提供したいウェブサイトを作成しています。各顧客には独自のデータベースがあり、各サイトには2つのデータベースが必要です。私が100人のアクティブな顧客を抱えていて、彼らがすべて自分のサイトで働いているなら、私は200の別個の接続文字列を持つことができます。SQL接続が多すぎる場合は、どのようにしたらわかりますか?
どのくらいの数があまりにも多いのですか?私は問題に遭遇するまで待たずに、事前に計画していきたいと思っています。
ASP.NETを使用していますか? .NETは接続プーリングを使用してSQL接続を再利用します。実際に何個の接続が直接開かれているか:
select COUNT(*)
from master.dbo.sysprocesses p
join master.dbo.sysdatabases d on p.dbID = d.dbID
where d.name = '<database>'
この文はDALから呼び出すことができますが、必要ではないと思います。どうして?私はMSSQL 2000の経験があります。オープンな接続で安定しています。
ウェブサービスがステートレス(それは私が思う共通の良いパターンです)の場合、その接続問題を回避できます。
ステートフル(私は永久的なオープン接続があることを意味します)サービスは計画が難しく、デザインを考え直すべきだと思います。
負荷テスト。
確立して自分でチェックアウトしたい多くの接続を開く小さなマルチスレッドコンソールアプリケーションを作成します。それぞれの接続が実行されているクエリの実行量を決定し、テストに含めることを確認してください。テストを実行しているときは、DBサーバー上のパフォーマンスモニタを開き、CPUサイクルを監視します。あなたのベンチマークがCPUサイクルのためのものであることを理解し、それを超えたときにあなたはあなたの答えを持っています。あなたのテストが設定されているdbサーバが、実稼働環境で動作するサーバとまったく同じであることを確認してください。
問題が生じるまで待つことはありません。あなたの顧客はそれに満足しません。
このレスポンスは、「あなたのための簡単な、おそらく...」の列に該当します。私は「小さなマルチスレッドコンソールアプリケーション」を書くのにはあまり熟練していませんが、これは興味深いテストのように聞こえるものです。 –
ねえ、ボブが聞いて、私がそこにいたときに覚えています。単なる提案ですが、私がマルチスレッドアプリケーションの作成について書きましたこのブログをチェックしてみてください。コードは実際にあなたのために書かれています。 http://blog.swipht.com/2008/9/29/multi-threading ... –
O ... therwiseは、多少容易になる可能性のあるサードパーティのテストスイートを見つけることができますあなたに。しかし、あなたは本当にそれをロードする必要がありますが、その多くのdb接続で、それはあなたのシステムを壊すことになる唯一の真の指標です。 –
接続の数は、制限を設定するのに特に有用なリソースではありません。サーバー上の負荷は、これらの接続で何が行われているかに非常に敏感です。あなたはその知識で何をしますか?制限に達すると接続を拒否しますか?この制限を超えるとユーザーエクスペリエンスが低下し始めることは、どのようにわかりますか?
それで、あなたがサポートできる接続の量は、利用可能なメモリの関数のほうが初期的です。 –
接続プールはアプリケーションの境界を越えて共有されていますか? IISアプリケーションプール? – Bryan
"ADO.NETは、同じアプリケーションドメインとプロセス内で、接続文字列と完全に一致するプールを検索します。プールが見つからない場合、ADO.NETは新しいプールを作成し、見つかった場合は新しいものを作成し、そのプールから使用可能な接続。 – boj