合并时连接如何分组?

时间:2016-01-29 00:10:24

标签: c# postgresql npgsql

我使用Npgsql使用C#连接到Windows上的Postgres数据库。在连接字符串中我有:

Database=dbname;Userid=username;Password=password;MinPoolSize=1;MaxPoolSize=50;ConnectionLifeTime=300;

我的应用程序有多个数据库。每个数据库都有一个特定于该数据库的用户。此外,还有一个超级用户可以访问所有数据库。它用于为它们创建新数据库及用户。

我所看到的是每个数据库的每个用户都保持数据库连接。因此,当超级用户创建数据库时,它会运行几个不同的查询,然后当最后一个查询完成时,它将处于空闲状态并且不会被回收。这导致服务器上的连接总数远远高于我的预期。

如果我查看pg_stat_activity我会看到的内容(对于2个数据库):

| user      | database | state  | query                       |
|-----------|----------|--------|-----------------------------|
| db1_user  | db1      | active | SELECT * FROM table         |
| db2_user  | db2      | idle   | SELECT * FROM another_table |
| superuser | db1      | idle   | CREATE USER db1_user        |
| superuser | db2      | idle   | CREATE USER db2_user        |

超级用户查询永远闲置。

我想知道的是,每个数据库的每个用户的连接池是什么?使用上面的连接字符串,每个用户在他们连接的每个数据库上获得最多50个连接的池?由于MinPoolSize=1每个用户在每个连接到的数据库上都有空闲连接?

1 个答案:

答案 0 :(得分:0)

它是连接字符串本身的键。对于大多数用途来说,这很有道理;一个人通常使用少量连接字符串(通常只有一个或两个),并且该字符串使用很多。

对于这里的使用类型,可能更有意义的是根本不使用池作为用户字符串,只是更多重用的超级用户字符串。