关于连接池的问题?需要透彻理解

cyndi 2004-10-10 10:38:14
1.我们的ASP.NET程序在运行中访问一段时间之后,就出现连接池达到上限的错误,原因是在使用SqlDataAdapter时一直没有关闭数据库连接.用sp_who查看用户连接只有一个running,剩下的全是sleeping状态,但是过一段时间重复访问URL,就可以恢复正常,但是连接池仍然只有一个running,而且过一定的访问量后同样错误又重复出现,数据库还是只有一个running.why?

2.当恢复正常连接后,即时连接池仅又一个running ,也可以通过多台机器进行正常访
问,why?

3.在使用SqlDataAdapter的情况下,何时关闭数据库连接才能使服务器及时收回连接资源并且不会导致频繁的创建连接(如当多用户同时请求数据库查询时能使得他们共享数据库连接)?how?
...全文
287 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cancersyf 2004-10-10
  • 打赏
  • 举报
回复
参考--

Tuning Up ADO.NET Connection Pooling in ASP.NET Applications:
http://www.15seconds.com/issue/040830.htm

Swimming in the .NET Connection Pool:
http://www.winnetmag.com/Article/ArticleID/38356/38356.html

Connection Pooling for the .NET Framework Data Provider for SQL Server:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconconnectionpoolingforsqlservernetdataprovider.asp
ajqc 2004-10-10
  • 打赏
  • 举报
回复
只要是同一个CONNECTIONSTRING的连接,默认下都会在同一个连接池内,默认情况下,这个连接池是100个连接的上限.可以设置最大最小连接数,如果你访问数据库后,坚持"我就不关,你能怎样给我"的话,那么,连接会给标识为在使用中,但在查询分析器中看的话,凡运行完查询的,基本上都是SLEEPING状态,这个连接池是.NET管理的,状态标识也是在.NET的管理下的,所以你只要打开一次连接后,一定会看到有N个连接是活动的(N=当前正在运查询的连接数,如果没有进行查询,那么就=你设置的最小连接数).
无论任何理由,最良好的习惯都是用完就关,.NET会自动把高于小最连接数的非活动连接关掉或设成SLEEPING状态.除了一种情况你可以不关:
单客户端操作数据库,而且整个程序只用一个连接控件的,这样的情况你完全可以不关
OLDBCONNECTON/SQLCONNECTON的CLOSE方法,只是把高于最小连接数的非活动连接关掉,把最小连接数内部分设为ACTIVE部分设为SLEEPING罢了.就算你调用了DISPOSE也没用,连接一样在.
关于这个问题,你可以做个101线程的访问机器人,狂刷上30分钟,看看有没有产生错误,比人手检查快多了,也准多了
cyndi 2004-10-10
  • 打赏
  • 举报
回复
to bruce007(蜀人):
你说Close方法并没有关闭真正的连接,那么调用改方法有什么意义呢?是不是为了通知数据库该连接可以释放了,然后由.net选择时机释放么?如果是这样的话,假如在.net释放这个连接之前请求数据库连接的用户过多,那么即时及时调用了Close函数,也会导致连接池满的现象喽?
cyndi 2004-10-10
  • 打赏
  • 举报
回复
这是一种解决办法,但是我是通过webservice调用数据库的,如果每次查询完后都显式的关闭数据库连接,连接池还起到提高效率的作用了么?我希望当多用户同时请求数据库查询时能使得他们共享数据库连接,应该在什么地方关闭呢?
bruce007 2004-10-10
  • 打赏
  • 举报
回复
你都说了是连接池了, 也就是说我们调用的SqlConnection 的Close() 方法并没有关闭asp.net服务器与数据库直接的连接。 而是asp.net收回该connection
什么时候关闭连接, 反正你总得保证页面执行完之前给关闭了。 一个良好得习惯是连接打开得时机越短越好了。
cansum396 2004-10-10
  • 打赏
  • 举报
回复
比方说在调用sqlcommand之后
要记得及时销毁conn与sqlcommand
我刚开始的时候也跟你一样常出现这个问题

后面把所有的跟SQL有关的在使用完之后全部销毁就没有出现这个问题了

62,067

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧