池化时如何对连接进行分组?
How Are Connections Grouped when Pooling?
我正在 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
每个用户在他们连接的每个数据库上都有空闲连接吗?
它以连接字符串本身为关键字。对于大多数用途来说,这是很有意义的;一个人通常使用少量连接字符串(通常只有一个或两个)并且该字符串使用很多。
对于此处的使用,完全不对用户字符串使用池化可能更有意义,而只对具有更高重用性的超级用户字符串使用池化。
我正在 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
每个用户在他们连接的每个数据库上都有空闲连接吗?
它以连接字符串本身为关键字。对于大多数用途来说,这是很有意义的;一个人通常使用少量连接字符串(通常只有一个或两个)并且该字符串使用很多。
对于此处的使用,完全不对用户字符串使用池化可能更有意义,而只对具有更高重用性的超级用户字符串使用池化。