<div dir="ltr"><div>Hi, thanks again for your reply Tatsuo.</div><div><br></div>These are all concurrent connections.  <div><br></div><div>If I reduce &#39;num_init_children&#39; to something smaller (e.g. 20) I do see the connection pools being reused (&#39;<span style="background-color:rgb(247,247,247);color:rgb(0,0,0)">pool_counter&#39; changes).</span></div><div><span style="background-color:rgb(247,247,247);color:rgb(0,0,0)"><br></span></div><div>After playing around with pgbench, various settings like &#39;<span style="color:rgb(0,0,0);font-family:monospace;font-size:medium">num_init_children&#39;, &#39;max_pool&#39;</span> and reading through your reply I&#39;m starting to think that pgPool-II may not do what I&#39;m trying to achieve.  Specifically where application-1 .. application-N are able to open perhaps hundreds of connections to pgPool-II but, because of connection pooling, pgPool-II would only open one or two connections (per application) to the backend database.</div><div><br></div><div>[application-1] -&gt;(hundreds of connections) -&gt; [pgPool-II] -&gt; (few connections) -&gt; [db1]</div><div>[application-2] -&gt;(hundreds of connections) -&gt; [pgPool-II] -&gt; (few connections) -&gt; [db2]<br></div><div>...</div><div>[application-300] -&gt;(hundreds of connections) -&gt; [pgPool-II] -&gt; (few connections) -&gt; [db300]<br></div><div><br></div><div>Am I correct in that the above is not possible currently?</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jul 1, 2020 at 8:55 PM Tatsuo Ishii &lt;<a href="mailto:ishii@sraoss.co.jp">ishii@sraoss.co.jp</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">&gt; Perfect, thanks for your reply!<br>
<br>
You are welcome!<br>
<br>
&gt; How can I validate that connection pooling is actually happening then?<br>
&gt; Something to verify that I&#39;ve configured it properly?<br>
<br>
I usually use pgbench for this purpose. pgbench&#39;s -C option helps.<br>
For example, I have 4 num_init_children with two backend system.<br>
<br>
pgbench -n -C -p 11000 -c 4 -t 10 -S test<br>
transaction type: &lt;builtin: select only&gt;<br>
scaling factor: 1<br>
query mode: simple<br>
number of clients: 4<br>
number of threads: 1<br>
number of transactions per client: 10<br>
number of transactions actually processed: 40/40<br>
latency average = 2.029 ms<br>
tps = 1971.232620 (including connections establishing)<br>
tps = 2573.647207 (excluding connections establishing)<br>
<br>
You can see some pgpool process have pool_counter something around 10.<br>
<br>
test=# show pool_pools;<br>
-[ RECORD 1 ]---+--------------------<br>
pool_pid        | 2782<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 0<br>
backend_id      | 0<br>
database        | test<br>
username        | t-ishii<br>
create_time     | 2020-07-02 09:38:00<br>
majorversion    | 3<br>
minorversion    | 0<br>
pool_counter    | 12<br>
pool_backendpid | 2804<br>
pool_connected  | 0<br>
-[ RECORD 2 ]---+--------------------<br>
pool_pid        | 2782<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 0<br>
backend_id      | 1<br>
database        | test<br>
username        | t-ishii<br>
create_time     | 2020-07-02 09:38:00<br>
majorversion    | 3<br>
minorversion    | 0<br>
pool_counter    | 12<br>
pool_backendpid | 2805<br>
pool_connected  | 0<br>
-[ RECORD 3 ]---+--------------------<br>
pool_pid        | 2782<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 1<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 4 ]---+--------------------<br>
pool_pid        | 2782<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 1<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 5 ]---+--------------------<br>
pool_pid        | 2782<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 2<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 6 ]---+--------------------<br>
pool_pid        | 2782<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 2<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 7 ]---+--------------------<br>
pool_pid        | 2782<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 3<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 8 ]---+--------------------<br>
pool_pid        | 2782<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 3<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 9 ]---+--------------------<br>
pool_pid        | 2783<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 0<br>
backend_id      | 0<br>
database        | test<br>
username        | t-ishii<br>
create_time     | 2020-07-02 09:38:00<br>
majorversion    | 3<br>
minorversion    | 0<br>
pool_counter    | 10<br>
pool_backendpid | 2810<br>
pool_connected  | 0<br>
-[ RECORD 10 ]--+--------------------<br>
pool_pid        | 2783<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 0<br>
backend_id      | 1<br>
database        | test<br>
username        | t-ishii<br>
create_time     | 2020-07-02 09:38:00<br>
majorversion    | 3<br>
minorversion    | 0<br>
pool_counter    | 10<br>
pool_backendpid | 2811<br>
pool_connected  | 0<br>
-[ RECORD 11 ]--+--------------------<br>
pool_pid        | 2783<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 1<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 12 ]--+--------------------<br>
pool_pid        | 2783<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 1<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 13 ]--+--------------------<br>
pool_pid        | 2783<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 2<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 14 ]--+--------------------<br>
pool_pid        | 2783<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 2<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 15 ]--+--------------------<br>
pool_pid        | 2783<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 3<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 16 ]--+--------------------<br>
pool_pid        | 2783<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 3<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 17 ]--+--------------------<br>
pool_pid        | 2784<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 0<br>
backend_id      | 0<br>
database        | test<br>
username        | t-ishii<br>
create_time     | 2020-07-02 09:38:07<br>
majorversion    | 3<br>
minorversion    | 0<br>
pool_counter    | 1<br>
pool_backendpid | 2820<br>
pool_connected  | 1<br>
-[ RECORD 18 ]--+--------------------<br>
pool_pid        | 2784<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 0<br>
backend_id      | 1<br>
database        | test<br>
username        | t-ishii<br>
create_time     | 2020-07-02 09:38:07<br>
majorversion    | 3<br>
minorversion    | 0<br>
pool_counter    | 1<br>
pool_backendpid | 2819<br>
pool_connected  | 1<br>
-[ RECORD 19 ]--+--------------------<br>
pool_pid        | 2784<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 1<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 20 ]--+--------------------<br>
pool_pid        | 2784<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 1<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 21 ]--+--------------------<br>
pool_pid        | 2784<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 2<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 22 ]--+--------------------<br>
pool_pid        | 2784<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 2<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 23 ]--+--------------------<br>
pool_pid        | 2784<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 3<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 24 ]--+--------------------<br>
pool_pid        | 2784<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 3<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 25 ]--+--------------------<br>
pool_pid        | 2785<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 0<br>
backend_id      | 0<br>
database        | test<br>
username        | t-ishii<br>
create_time     | 2020-07-02 09:38:00<br>
majorversion    | 3<br>
minorversion    | 0<br>
pool_counter    | 10<br>
pool_backendpid | 2809<br>
pool_connected  | 0<br>
-[ RECORD 26 ]--+--------------------<br>
pool_pid        | 2785<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 0<br>
backend_id      | 1<br>
database        | test<br>
username        | t-ishii<br>
create_time     | 2020-07-02 09:38:00<br>
majorversion    | 3<br>
minorversion    | 0<br>
pool_counter    | 10<br>
pool_backendpid | 2808<br>
pool_connected  | 0<br>
-[ RECORD 27 ]--+--------------------<br>
pool_pid        | 2785<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 1<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 28 ]--+--------------------<br>
pool_pid        | 2785<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 1<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 29 ]--+--------------------<br>
pool_pid        | 2785<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 2<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 30 ]--+--------------------<br>
pool_pid        | 2785<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 2<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 31 ]--+--------------------<br>
pool_pid        | 2785<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 3<br>
backend_id      | 0<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
-[ RECORD 32 ]--+--------------------<br>
pool_pid        | 2785<br>
start_time      | 2020-07-02 09:37:43<br>
pool_id         | 3<br>
backend_id      | 1<br>
database        | <br>
username        | <br>
create_time     | <br>
majorversion    | 0<br>
minorversion    | 0<br>
pool_counter    | 0<br>
pool_backendpid | 0<br>
pool_connected  | 0<br>
<br>
test=# <br>
<br>
&gt; Our Postgres instance is home to several hundred databases uniquely used by<br>
&gt; several hundred applications.  For example, application1 only uses<br>
&gt; database1, application2 only uses database2, and so on.<br>
&gt; <br>
&gt; Because of this multitenancy we&#39;ve restricted the number of connections to<br>
&gt; each database to 20.  This worked when we were running dozens of databases<br>
&gt; but it hasn&#39;t scaled well and I was hoping that pgpool would resolve this.<br>
&gt; However, I do have a few applications that are still hitting that 20<br>
&gt; connection limit in the database.<br>
<br>
So your hope is handling several hundred databases/applications<br>
concurrently (and limit up to 20 connections for database/application<br>
pair). If they really concurrently access PostgreSQL, you need<br>
several hundred max_connections. There&#39;s no way to avoid this. On the<br>
other hand, if they do not access database really concurrently, for<br>
example application A accesses DB for 5 minutes then disconnect, and<br>
then application B accesses DB for 5 minutes, you can reduce the<br>
number of concurrent connections. In this case you should:<br>
<br>
- disable connection cache in Pgpool-II so that a connection to<br>
  backend can be used by different applications.<br>
<br>
- limit num_init_children to 20*(number of concurrent access to DB)<br>
<br>
- set same number to max_connections of PostgreSQL<br>
<br>
- set max_pool to 1<br>
<br>
&gt; Thanks<br>
&gt; <br>
&gt; <br>
&gt; On Wed, Jul 1, 2020 at 3:46 PM Tatsuo Ishii &lt;<a href="mailto:ishii@sraoss.co.jp" target="_blank">ishii@sraoss.co.jp</a>&gt; wrote:<br>
&gt; <br>
&gt;&gt; &gt; Hi Guys,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; When I list the output of SHOW POOL_POOLS, all the pools have a<br>
&gt;&gt; pool_counter=1<br>
&gt;&gt; &gt; and a distinct pool_backendpid.  To me this means that even though I have<br>
&gt;&gt; &gt; the same users connecting, with the same major/minor, connection pools<br>
&gt;&gt; &gt; aren&#39;t being reused.  Is that correct?  Here&#39;s a snippet (I have three<br>
&gt;&gt; &gt; backends):<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;  141204   | 2020-07-01 11:04:21 | 0       | 0          |<br>
&gt;&gt; mobile-search-bff<br>
&gt;&gt; &gt;               | v-token-mo-mobile-s-yAjmcIzpEvK | 2020-07-01 12:16:19 | 3<br>
&gt;&gt; &gt;          | 0            | 1            | 12047           | 1<br>
&gt;&gt; &gt;  141204   | 2020-07-01 11:04:21 | 0       | 1          |<br>
&gt;&gt; mobile-search-bff<br>
&gt;&gt; &gt;               | v-token-mo-mobile-s-yAjmcIzpEvK | 2020-07-01 12:16:19 | 3<br>
&gt;&gt; &gt;          | 0            | 1            | 60420           | 1<br>
&gt;&gt; &gt;  141204   | 2020-07-01 11:04:21 | 0       | 2          |<br>
&gt;&gt; mobile-search-bff<br>
&gt;&gt; &gt;               | v-token-mo-mobile-s-yAjmcIzpEvK | 2020-07-01 12:16:19 | 3<br>
&gt;&gt; &gt;          | 0            | 1            | 137228          | 1<br>
&gt;&gt; [snip]<br>
&gt;&gt; &gt; The only thing I can think of is that it may have something to do with<br>
&gt;&gt; the<br>
&gt;&gt; &gt; user names (these are Vault-generated users).<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I do have the connection cache parameter on:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; connection_cache on<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I&#39;m using PgPool-II v. 4.1.1.<br>
&gt;&gt;<br>
&gt;&gt; Yes, that&#39;s an expected behavior. The OS feels free to assign a<br>
&gt;&gt; pool_pid for a client connection to any of pre-forked pool_pid. The OS<br>
&gt;&gt; does not care whether the pool_pid already has a connection pool to<br>
&gt;&gt; backend. So until all pool_pid have same connection pool (same<br>
&gt;&gt; user/database pair), it may be possible that pool_counter remains 1.<br>
&gt;&gt;<br>
&gt;&gt; The FAQ explains this in a different way.<br>
&gt;&gt;<br>
&gt;&gt; <a href="https://pgpool.net/mediawiki/index.php/FAQ#Is_connection_pool_cache_shared_among_pgpool_process.3F" rel="noreferrer" target="_blank">https://pgpool.net/mediawiki/index.php/FAQ#Is_connection_pool_cache_shared_among_pgpool_process.3F</a><br>
&gt;&gt;<br>
&gt;&gt; Best regards,<br>
&gt;&gt; --<br>
&gt;&gt; Tatsuo Ishii<br>
&gt;&gt; SRA OSS, Inc. Japan<br>
&gt;&gt; English: <a href="http://www.sraoss.co.jp/index_en.php" rel="noreferrer" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
&gt;&gt; Japanese:<a href="http://www.sraoss.co.jp" rel="noreferrer" target="_blank">http://www.sraoss.co.jp</a><br>
&gt;&gt;<br>
</blockquote></div>