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

标签 sql-server-2008 c#-4.0

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

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

提前致谢!

最佳答案

看来我能够使用 PerfMon 来监控连接池。这表明我实际上达到了池限制,令我惊讶的是,池并不像我认为的那样设置为 200。问题解决了!有时,我们创建如此复杂的代码会导致我们自己的问题!

旁注 - 我最初使用的是 sp_who2,但是当我发生异常时,池被清理了,所以我无法获得准确的读数。

关于sql-server-2008 - 有没有办法从 C# 代码检查池中的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6765636/

相关文章:

java - 从繁忙的 Java Web 应用程序插入 30,000 个用户后,SQL Server 2008 变慢

SQL 2000 到 SQL 2008

sql-server-2008 - 搜索和排名短语(例如电影标题)

c# - 从操作中获取方法名称

asp.net - 带文本的工具提示 + databinder.eval

xml - 如何使用 XQUERY 在 T-SQL 中获取给定 XML 属性的许多元素?

sql-server - 在选择查询中向 xml 列添加节点

c#-4.0 - 使用 Monotouch 在 UITableViewCell 中绘制网格

c# - 如何在 C# 中实现 web api facade

c#-4.0 - 如何使用 folderid 属性获取 Exchange 邮箱地址?