0

私はしばらくこれを研究してきましたが、納得のいく答えは得られませんでした。

mysql チュートリアルによると、デフォルトの接続数は 200 未満であり、十分なリソースがある限り、Linux ボックスで max_connection_num を 2000 に設定できると書かれています。数百万人が同時に Web サイトにアクセスする可能性があるため、この数は実際の展開では十分ではないと思います。

各クエリの時間コストを削減するために最適化する方法について説明している記事がいくつかあります。しかし、この問題がどのように根本的に引き起こされているかを教えてくれる人はいません。大規模な接続が同時に発生するのを防ぐために、キューのようなメカニズムが必要だと思います。そうしないと、最終的に「too connection」例外が発生します。

誰かがこの分野の専門知識を持っていますか? ありがとうございました。

4

3 に答える 3

2

いくつかのオプションがあります。

  1. 接続プーリング
  2. あなたが言及したように:キューイング。同時に接続するクライアントが多すぎる場合は、アプリケーション層がこの例外を処理し、リクエストを短時間スリープさせてから再試行する必要があります。通常、このようなトラフィックの多い環境では、数秒以上続くリクエストを禁止する必要があります。
  3. レプリケーションクラスタリングによる負荷分散
于 2012-06-26T20:44:39.783 に答える
0

通常、アプリケーションはすでに確立されている接続を再利用することになっています。ただし、アプリケーションを実装するために選択した言語には制限があります。Java または .Net を使用する場合は、接続のプールを持つことができます。PHPの場合はそうではありません。 このディスカッションを確認できます

于 2012-06-26T18:38:13.893 に答える
0

max_connection_num を超えると、接続が多すぎるというエラーが発生します。しかし、実際に Web サーバーに 100 万人のユーザーがまったく同時にいる場合、とにかく 1 つのサーバーでそれを処理することはできません。100 万の同時接続を処理するには、非常に大きなファームが必要です。

ただし、データベースへのクライアントは webapp であり、webapp は通常、接続プールと呼ばれる抽象化を介してデータベースに接続します。これにより、すべてのデータベース接続が同じように通過する限り、クライアント側のデータベースへの接続数が制限されます。プール。

于 2012-06-26T18:39:30.900 に答える