You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET Core 2中获取Npgsql 3.2.6连接池的连接状态详情?

获取Npgsql 3.2.6连接池状态详情(.NET Core 2环境)

当然可以!在你使用的Npgsql 3.2.6版本中,已经内置了获取连接池统计信息的能力,完全可以拿到总连接数、空闲可用连接数这些关键数据,帮你区分PostgreSQL端看到的“空闲连接”和应用端实际可用的连接。

具体实现方法

Npgsql提供了NpgsqlConnection.GetPoolStatistics()静态方法,它会返回所有连接池的统计数据集合,每个统计项对应一个NpgsqlPoolStatistics对象,里面包含了你需要的核心属性:

  • TotalConnections:连接池中的总连接数(不管是正在使用还是空闲)
  • IdleConnections:池里当前空闲、可以被立即复用的连接数(这就是你要找的“可自由使用”的连接)
  • UsedConnections:当前被应用程序持有、正在使用的连接数

举个简单的代码示例:

using Npgsql;

// 获取所有连接池的统计信息
var poolStats = NpgsqlConnection.GetPoolStatistics();

foreach (var stat in poolStats)
{
    Console.WriteLine($"=== 连接池(标识哈希:{stat.PoolHash}) ===");
    Console.WriteLine($"总连接数:{stat.TotalConnections}");
    Console.WriteLine($"空闲可用连接数:{stat.IdleConnections}");
    Console.WriteLine($"正在使用的连接数:{stat.UsedConnections}");
}

关于PostgreSQL端显示的空闲连接的说明

你提到当连接池设为100时,PostgreSQL看到100个空闲连接,但想知道其中多少是可用的——这是因为PostgreSQL端的“空闲连接”指的是数据库层面没有在执行查询的连接,但这些连接可能已经被你的应用程序从连接池中取出、处于被持有状态(也就是UsedConnections统计的部分),只是暂时没有执行SQL而已。而Npgsql的IdleConnections才是真正回到池里、可以被新的请求复用的连接。

这样就能精准区分开两种“空闲”的差异,帮你排查连接池的使用情况。

内容的提问来源于stack exchange,提问作者ali afshari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:17:49