5

PHPのシングルトンについての議論で、この問題についてますます考えさせられました。ほとんどの人は、1 回のリクエストで多数の DB 接続を作成するべきではないと指示しています。私が最初に考えたのは、スクリプトが DB に対して多くのリクエストを行うための費用であるということですが、次の質問に反論します。

事情に詳しい人からの回答 (証拠を添えて) はどうですか?

4

5 に答える 5

10

データベース接続は限られたリソースです。一部の DB では接続制限が非常に低く、接続の無駄遣いが大きな問題となっています。多数の接続を消費することで、他のユーザーによるデータベースの使用をブロックしている可能性があります。

さらに、DB サーバーにアイドル状態のリソースがない限り、DB に大量の余分な接続を投げても何の役にも立ちません。8 つのコアがあり、クエリを満たすために 1 つしか使用されていない場合は、別の接続を作成すると役立つ場合があります。ただし、使用可能なすべてのコアを既に使用している可能性が高くなります。また、DB リクエストごとに同じハードドライブをヒットし、ロックの競合を追加している可能性があります。

DB の使用率が高いと思われるものがある場合は、接続を追加しても役に立ちません。これは、追加の並行性によって処理が高速化されるという盲目的な希望を持って、アプリケーションで追加のスレッドを生成するようなものです。特定の状況ではそうなるかもしれませんが、それ以外の場合では、ハード ドライブをスラッシングしたり、タスク切り替えに時間を浪費したり、同期のオーバーヘッドを導入したりするため、速度が低下するだけです。

于 2008-08-26T17:03:06.273 に答える
4

これは、接続のセットアップ、データの転送、および破棄のコストです。それはあなたのパフォーマンスを食い尽くすでしょう。

証拠をつかむのは難しいですが、次のことを考慮してください...

接続を確立するのに x マイクロ秒かかるとしましょう。

ここで、いくつかのリクエストを行い、データをやり取りしたいと考えています。転送時間の差は、1 つの接続と多数の接続の間で無視できるとしましょう (議論のために)。

ここで、接続を閉じるのに y マイクロ秒かかるとしましょう。

1 つの接続を開くには、x+y マイクロ秒のオーバーヘッドがかかります。多く開くには n * (x+y) かかります。それはあなたの実行を遅らせるでしょう。

于 2008-08-26T16:56:22.203 に答える
2

通常、DB 接続のセットアップは非常に負荷がかかります。バックステージでは、多くのことが行われています (DNS 解決/TCP 接続/ハンドシェイク/認証/実際のクエリ)

すべての TCP 接続が立ち上がるまでに数秒かかる奇妙な DNS 構成で問題が発生したことがあります。私のログイン手順 (複雑なアーキテクチャのため) を完了するには、3 つの異なる DB 接続が必要でした。その問題により、ログインに永遠に時間がかかっていました。次に、コードをリファクタリングして、1 つの接続のみを通過するようにしました。

于 2008-08-26T16:59:49.747 に答える
1

.NET から Informix にアクセスし、複数の接続を使用します。各接続でトランザクションを開始しない限り、多くの場合、トランザクションは接続プールで処理されます。これは非常にブランド固有であることは承知していますが、ほとんどの (?) データベース システムのサイレント アクセスは、その能力を最大限に引き出すために接続をプールします。

余談ですが、クロスデータベース接続のため、接続数に問題がありました。Informix は同義語をサポートしているため、一般的な違反者を同義語にし、複数の接続をサーバー側で処理して、転送時間、接続作成のオーバーヘッド、および (この状況の真の核心である) ライセンス料を大幅に節約しました。

于 2008-08-26T17:02:28.850 に答える
0

リクエストがサーバー上で繰り返し行われ、毎回ブロックされるため、リクエストが非同期に送信されていないためだと思います。一度...

Flex では、すべての Web サービス呼び出しが自動的に非同期で呼び出されるため、複数の接続が表示されたり、同じ接続で要求がキューに入れられたりすることがよくあります。

非同期リクエストは、リクエスト/レスポンス時間を高速化することで接続コストを軽減します...PHPでは、スレッド化なしではこれを簡単に達成できないため、単純に同じ接続を再利用するよりもパフォーマンスへの影響が大きくなります。

それは私の2セントです...

于 2008-08-26T16:58:22.387 に答える