C# 池时如何对连接进行分组?

C# 池时如何对连接进行分组?,c#,postgresql,npgsql,C#,Postgresql,Npgsql,我正在使用Npgsql使用C#连接到Windows上的Postgres数据库。在连接字符串中,我有: Database=dbname;Userid=用户名;密码=密码;最小池大小=1;MaxPoolSize=50;ConnectionLifeTime=300 我的应用程序有多个数据库。每个数据库都有一个特定于该数据库的用户。此外,还有一个超级用户可以访问所有数据库。它用于创建新数据库及其用户 我看到的是,每个数据库的每个用户的数据库连接都是打开的。因此,当超级用户创建一个数据库时,它会运行几个不

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

Database=dbname;Userid=用户名;密码=密码;最小池大小=1;MaxPoolSize=50;ConnectionLifeTime=300

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

我看到的是,每个数据库的每个用户的数据库连接都是打开的。因此,当超级用户创建一个数据库时,它会运行几个不同的查询,而当最后一个查询完成时,它会处于空闲状态,不会被回收。这导致服务器上的连接总数比我预期的要高得多

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

超级用户查询永远处于空闲状态


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

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


对于此处的使用类型,完全不使用用户字符串池可能更有意义,而只使用具有更高重用性的超级用户字符串。

这取决于用于连接postgresql的ADO.NET提供程序。你在使用什么库,你把你的问题标记为
npgsql
这就是你正在使用的吗?@ScottChamberlain是的,我正在使用
npgsql
好,这很有意义。因此,使用我上面的示例,通过键入
dbname
username
password
可以共享连接。正确吗?我的另一个问题是,为什么超级用户查询从未被清理?在
ConnectionLifeTime
| 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        |