我的应用程序在带有24 CPU和16 GB RAM的Windows Server 2106上运行,并使用PostgreSql 11.2作为单独CentOS 7服务器上的数据库。使用Npgsql 4.0.6用C#4.7.1编写应用程序。
通常(使用100-200个并发连接)一切正常。但是,在较重的负载(400-500个并发连接)期间,会有一些“冻结”-服务器停止处理新请求,挂起几秒钟,然后继续正常工作。
尝试了几种配置之后,我们将数据库服务器上的CPU数量从8个增加到16个。冻结被消除,直到大约有700个并发连接。因此,我的注意力(以及其他一些想法)集中在使用数据库上。
我已经按照Npgsql docs的说明安装了Npgsql性能计数器,并如下修改了ConnectionString:
<appSettings>
<add key="DatabaseConnectionString" value="Server=dbserver;Port=5432;Database=mydb;User Id=postgres;Password=mypass;CommandTimeout=30;Use Perf Counters=true" />
</appSettings>
文档指出Npgsql uses pooling by default,但是, 性能监视器显示,NumberOfNonPooledConnections和NumberOfPooledConnections计数器的值始终都是相同的,并且它们等于24-App服务器上的内核数。 NumberOfActiveConnectionPools计数器为1,所有其他计数器为0。
这是否意味着我的700个并发请求中只有24个非池连接?这是预期的行为吗?我想念什么吗?
提前感谢您的回答和建议