前言:出现这种问题使因为程序对connection的回收出现了问题,是因为你的代码出出现了过多new connection(),这种情况还是你的代码问题,如果不想把问题归根于程序,那你就可以改变config连接字符串.
在sqlserver中查看链接的Sql
select * from sysprocesses where dbid= db_id('数据库名')
如果在项目中未指明Connectionstring的max pool 的大小,默认是100, 理论最大为32767,如果项目对这个数据库的链接超过了最大限制,则会让后面的链接进行等待,等待时间为15s.
说明:也就是在connectionString中如果未指定max pool size的值,则max pool size=100,当访问人员同时连接数据库的数量为101人时,则等待SqlConnection.ConnectionTimeout设置的时间(默认是15 秒)后,还是没有可用的Connection则会出现上面的错误。
但如果超过了这个时间则会报错,报错详情如下:
中文错误:
1.在访问数据库的页面上使用数据缓存,如果页面的数据不是经常更新(几分钟更新一次)的话,使用Cache对象可以不用访问数据库而使用缓存中的内容,那么可以大大减少连接数量。
2.可以在WEB.config 里面修改连接字符串中的Max Pool Size = N;来动态扩大连接池中的连接最大数量。
<add key="data" value="server=192.168.1.123; Port=3336; uid=root; pwd=root;database=Userdata;pooling=true;min pool size=5;max pool size=512;connect timeout = 20; "/>
数据库Connection Pool 连接池是什么?