質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

2回答

1938閲覧

PostgreSQLへの接続にNPGSQLを使った場合のコネクションプーリングの数に関して

TacoR

総合スコア6

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2023/05/30 08:46

実現したいこと

ここに実現したいことを箇条書きで書いてください。
・PostgreSQLをNPGSQLで接続する
・プログラムはc#で開発

c#から接続するときに接続文字列に以下のように書いています
(コネクションプールを使って最大数100個)
Server=dbserver;Port=5432;User Id=uid;Password=pass;Database=db1;Pooling=true;MaxPoolSize=100

このMaxPoolSizeですがこの数はどのように管理されているのでしょうか?
最初の接続で100個設定されると思いますが、この100個というのは自分だけが使う分ではなく他のユーザが上記と同じ接続をした場合も使いまわされるということでしょうか?
だとしたら、同時にSQLを実行できるのは100個までということになるのでしょうか?

前提

・PostgreSQLはWindowsサーバにインストール

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2023/05/30 10:51 編集

このコメントは回答欄に移しました。
退会済みユーザー

退会済みユーザー

2023/05/30 23:57

質問者さん、無言ですが、回答が出ているのでそれらに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。
sazi

2023/05/31 07:44 編集

ChatGPTが返してくれた内容は、一般的なコネクションプールについての説明としては正しいと思います。 ところで、コネクションプール自体は何を利用しているんでしょう? postgresなので、Pgpool-II?
退会済みユーザー

退会済みユーザー

2023/05/31 22:49

> MaxPoolSizeを100に設定した場合、最初の接続時に100個の接続が確立されますが、 ADO.NET + SqlClient + SQL Server の場合と違うようです。
sazi

2023/06/01 02:16 編集

@SurferOnWwwさん コネクションプール機能についてどのようなものを使用しているのか不明なので、そこは何とも言えませんが、 ChatGPTへは質問を丸投げしたので、ChatGPTは質問の表現を極力使おうとしてる傾向があるように思います。 精査が必要かかどうかに関しては、質問の主題では無いので気にしていません。
sazi

2023/06/01 02:23

ChatGPTの回答は確認する為の指針として良いかと思いますが、結局裏どりとかしないと駄目なので、ChatGPTの回答そのものを回答とするのは、今後控えようと思います。
guest

回答2

0

ChatGPTに質問してみました。

MaxPoolSizeは接続プール内での最大接続数を指定するためのパラメータです。接続プールは、アプリケーションがデータベースに接続するたびに接続を確立するのではなく、プール内の接続を再利用することでパフォーマンスを向上させます。

MaxPoolSizeを100に設定した場合、最初の接続時に100個の接続が確立されますが、これは特定のユーザーに関連付けられた接続ではなく、プール内の全体の接続数です。したがって、同じ接続文字列を使用して他のユーザーも接続を行った場合、彼らも同じ接続プールを共有します。

MaxPoolSizeは同時に実行できるSQLの数を制限するものではありません。接続プール内の接続がすべて使用されている場合、新しい接続を要求すると、接続プールは一時的に待機状態に入ります。接続が利用可能になるまで待機し、利用可能な接続があればそれを再利用します。したがって、MaxPoolSizeは同時に確立できる接続の数ではなく、接続プール内で維持される最大接続数を表します。

要約すると、MaxPoolSizeは接続プール内の最大接続数を指定し、同時にSQLを実行できる数を制限するものではありません。他のユーザーが同じ接続を行った場合でも、接続プールを共有して接続を再利用します。

投稿2023/05/30 11:02

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C# の .NET Framework のアプリで、ADO.NET を利用するということで、Npgsql も SqlClient と同じ設計になっていれば(そこは自分は分かりませんが)、以下の記事が参考になると思います。

SQL Server の接続プール (ADO.NET)
https://learn.microsoft.com/ja-jp/dotnet/framework/data/adonet/sql-server-connection-pooling

投稿2023/05/30 10:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問