1

これに必要な情報を説明しましょう。

複数の同時ユーザーが同時に同じレコードをヒットしています。これは、db側でキューイングとロックが行われることを意味します。このバッファの大きさはどれくらいですか?200人以上の同時ユーザーのキューとロックを保持できますか?

セットアップでこのバッファーのサイズを決定するにはどうすればよいですか?デフォルト設定はありますか?

4

1 に答える 1

1

データベースにはクエリ キュー (「バッファ」) はありません。

データベースへの同時接続ごとに、実行中のクエリを 1 つ持つことができます。その後ろに他のクエリをキューに入れることはできません*

あなたのアプリケーションは、Rails である内部接続プールを使用する可能性が高いため、接続プールにスロットがあるため、多くのクエリを待機させることができます。

アプリと PostgreSQL の間でプロキシする PgBouncer のような外部接続プールがある場合、pgbouncer 接続は非常に軽量であるため、pgbouncer に接続するときにアプリでより大きなプール サイズを使用できるため、より多くのクエリをキューに入れることができます。PgBouncer は、少数の PostgreSQL への実際の接続でこれらのリクエストを処理します。このように使用すると、PgBouncer は効果的にクエリ キューになります (必ずしも FIFO キューである必要はありません)。ただし、これらのクエリは発行時に実際には Pg にヒットしないため、PgBouncer で待機している間はロックを取得しませんこれは、一部の同時実行設計にとって重要になる場合があります。


* OK、一度に複数のセミコロンで区切られたクエリを送信できますが、キューのように連続して送信することはできません。

于 2012-09-04T22:11:14.193 に答える