有没有办法从C#代码检查池中的连接?

时间:2011-07-20 17:02:00

标签: sql-server-2008 c#-4.0

我正在开发一个混淆工具,它基本上在专用SQL服务器(仅用于此工具)上锤取数据库,以检索记录,执行一些数据操作,然后更新这些记录。这一切都是使用LINQ to SQL完成的。我正在使用任务和并行循环来同时运行尽可能多的更新。所有SQL都是从相同的连接字符串完成的。最初我使用默认的最大连接池大小(100),假设它就足够了。运行几个小时后(因为这个工具正在更新数百万条记录),它开始呕吐,因为它无法建立连接。在查看连接池之后,我注意到我已经达到了100的限制。因此我将限制增加到200.这样做效果要好得多,但是我的一个进程(没有提到它在几个进程中运行)最终大约3个小时后失败。连接池似乎没有被过度使用,因此我一直在挠头。我已经检查了我的代码中的许多区域,以确保所有连接都被处理掉。我甚至将所有连接代码移动到一个中心位置,所以现在代码只建立来自一个位置的连接。为了排除连接池被最大化的想法,我想使用C#查询池以查看尝试连接时异常的限制。这可能吗?框架是否具有执行此操作的代码,或者是否需要运行SQL stmt来确定此问题?

仅供参考:我使用的是4.0和SQL 2008。

提前致谢!

1 个答案:

答案 0 :(得分:2)

看起来我能够使用PerfMon来监控连接池。这告诉我,我实际上是在达到游泳池限制,令我惊讶的是,游泳池不是200,就像我认为我设置它一样。问题解决了!有时,我们会创建这样复杂的代码,导致我们自己的问题!

旁注 - 我最初使用的是sp_who2但是当我的异常发生时,游泳池被清理干净,因此无法获得准确的读数。