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 |