我有个系统,并发量比较大,在数据库操作的时候即时关闭了数据库连接,但还数据库是有大量的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 也没任何效果
应该是连接池的原因,建议在数据库连接字符串中加上 Max Pool Size=1 试试
谢谢你的回复,但我不想限制连接数量呢,我想在不够的时候自动增加,用完自动关闭。
我加了Min Pool Size=1是为了最少保持一个打开的连接,这样不会在所有连接都关闭的情况下需要重新连接数据库。
如果加上Max Pool Size=1 很容易报连接池不够的错误,这也不是我想要的结果
@relax: 不够的时候自动增加,用完自动关闭。。连接池就是为了减少打开连接的开销的,而这不能兼得哦。
@relax: 如果使用连接池,sleeping AWAITING COMMAND是正常表现
如果你不想将 Max Pool Size 修改为 1,那么你可以在代码中调用 SqlConnection.ClearPool 方法。
连接池你关闭连接是不会释放资源的,连接池就是为了减少打开连接的开销的,有资源重用,系统响应速度快等好处