2016-07-21 13 views
2

AWSで実行されているSQL-AlchemyベースのWebアプリケーションがあります。負荷テストSQL Alchemy:「TimeoutError:サイズ3のオーバーフロー0のキュープール制限に達し、接続タイムアウト、タイムアウト30」

webappには、Webリクエストを受け取り、共有データベースにクエリー/ライトするELBの背後にいくつかのc3.2xlarge EC2インスタンス(それぞれ8CPU)があります。

私が使用しているデータベースは、タイプ:db.m4.4xlargeのRDSインスタンスです。

SQLALCHEMY_POOL_SIZE = 3 
SQLALCHEMY_MAX_OVERFLOW = 0 

を高負荷の下では、私のアプリケーションは次のエラーを投げて開始します:

TimeoutError: QueuePool limit of size 3 overflow 0 reached, connection timed out, timeout 30 

私が増加すると

マイSQL錬金術の設定は次のとおりですMariaDB 10.0.17

を実行していますSQLALCHEMY_POOL_SIZEが3から20の場合、エラーは同じ負荷テストで消えます。ここに私の質問があります:

  1. 私のDBが処理できる合計同時接続数は?
  2. Number of Number of EC2 instances * Number of Cores Per instance * SQLALCHEMY_POOL_SIZEは質問1の回答を上回ることはできますが、上回ることはできません。
  3. 私のような分散型WebアプリケーションのDB接続プールのサイズについては、他の制限事項も知りたいですか?

答えて

1

MySQLは、実質的に任意の数の「同時」接続を処理できます。しかし、数十以上がが活発にクエリを実行している場合は、かもしれないトラブルがあります。

クエリが何をしているかを知ることがなければ、人は3私はあなたがクエリが豚されている情報を収集するためにslowlogをオンにお勧めの制限または300

であるかどうかと言うことはできません。うまく調整されたWebアプリは、3つの接続で99%の時間を簡単に生き延びることができます。

その他の1% - よく、スパイクがあります。このため、3は不当に低いです。

関連する問題