首页 新闻 会员 周边

为什么关闭了数据库连接还是会有很多 sleeping AWAITING COMMAND

0
悬赏园豆:50 [已解决问题] 解决于 2015-08-20 12:49

我有个系统,并发量比较大,在数据库操作的时候即时关闭了数据库连接,但还数据库是有大量的sleeping AWAITING COMMAND状态的空闲连接,请问是哪里的问题~

数据库连接:<add key="Interface" value="Data Source=127.0.0.1;Initial Catalog=Interface;User ID=sa;Password=sa;Connect Timeout=15;Workstation ID=Interface;Min Pool Size=1"/>

SQL执行:

 

 sys.sp_who2 结果:

 

 

加了 IF @@TRANCOUNT>0 ROLLBACK TRAN 也没任何效果

relax的主页 relax | 初学一级 | 园豆:113
提问于:2015-08-07 11:48
< >
分享
最佳答案
0

应该是连接池的原因,建议在数据库连接字符串中加上 Max Pool Size=1 试试

收获园豆:20
dudu | 高人七级 |园豆:31007 | 2015-08-07 11:55

谢谢你的回复,但我不想限制连接数量呢,我想在不够的时候自动增加,用完自动关闭。

我加了Min Pool Size=1是为了最少保持一个打开的连接,这样不会在所有连接都关闭的情况下需要重新连接数据库。

如果加上Max Pool Size=1 很容易报连接池不够的错误,这也不是我想要的结果

relax | 园豆:113 (初学一级) | 2015-08-07 11:58

@relax: 不够的时候自动增加,用完自动关闭。。连接池就是为了减少打开连接的开销的,而这不能兼得哦。

幻天芒 | 园豆:37175 (高人七级) | 2015-08-07 12:12

@relax: 如果使用连接池,sleeping AWAITING COMMAND是正常表现

dudu | 园豆:31007 (高人七级) | 2015-08-07 12:17
其他回答(2)
0

如果你不想将 Max Pool Size 修改为 1,那么你可以在代码中调用 SqlConnection.ClearPool 方法。

收获园豆:15
Launcher | 园豆:45045 (高人七级) | 2015-08-07 14:43
0

连接池你关闭连接是不会释放资源的,连接池就是为了减少打开连接的开销的,有资源重用,系统响应速度快等好处

收获园豆:15
稳稳的河 | 园豆:4216 (老鸟四级) | 2015-08-10 12:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册