超时时间已到。超时时间已到,但是尚未从池中获取连接。

it sqlserver

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。 

解决办法
1.在代码里面,把未关闭的连接关闭
2.扩大共享池,方法如下:
解决方法可以是修改连接池的连接生存期,因为默认值是60秒,即连接从应用程序被释放后可以在池中保存的时间。
具体操作步骤如下:
如果是ODBC的话,则可以在ODBC Data Source Administrator中手动更改,该程序位于“Start”菜单中的“Programs”->\"Adminstrative Tools\"(中文名:管理工具)下,或从\"Control Panel\"(中文名:控制面板)中打开“ODBC Data Source Administrator”(ODBC数据源管理器),再选择“Connection Pooling”(连接池)选项卡,双击驱动程序中的“SQL Server”,选择“Pool Connetions to this drive”(使用池连接该驱动程序),把下面的时间60秒改的大一点,例如120。
如果是SqlConnection的共享连接,则为ConnectionString属性Connection Lifetime数值名称指定一个值,该值默认情况下是0,表示连接永远不会从池中被自动移走。如果指定一个不同的值,那么一旦连接被返回到池中,该值将和连接的创建时间及当前时间进行比较。如果生存期超过了Connection Lifetime的值,那么连接将从池中被移走。

问题的原因是与数据库的连接没有显示关闭,而等系统自动回收是要时间的.解决的方法是改变连接池的大小.在连接字符串的后面加上以下代码:Enlist=true;Pooling=true;Max Pool Size=300;Min Pool Size=0;Connection Lifetime=300;user id=sa;packet size=1000
packet size参数取512到32767中的任一整数值

DataReader是独占连接的,就是说你的程序可能设计上有问题。比如说最大连接设100,假设有100个人同时使用DataReader正在读取数据库内容,那么当第101人读取的时候,连接池中的连接已经没有了,就会出现上面的错误。DataReader是独占连接的,每个DataReader都要占用一个连接。当然这个情况是偶尔出现的,所以会很长时间出现一次,因为只有同时有超过连接池最大连接数量的并发操作才会发生。而且你加大并发数量只能暂时缓解问题,如果你加大到200个并发连接,如果有201人同时操作怎么办?你说了你使用Connection对象的Close()方法,这是不行的,因为Close()方法仅仅是关闭连接,但这个连接没有释放,还是被这个对象占用,要释放必须使用Connection的Dispose()方法显式释放连接才可以,否则这个对象占用的连接只能等到垃圾收集的情况下才能被释放。这种情况肯定会出现“超时时间已到”的错误。

解决方法:
1 修改几个关键页面或访问比较频繁的数据库访问操作,使用DataAdapter和DataSet来获取数据库数据,不要使用DataReader。
2 在访问数据库的页面上使用数据缓存,如果页面的数据不是经常更新(几分钟更新一次)的话,使用Cache对象可以不用访问数据库而使用缓存中的内容,那么可以大大减少连接数量。
3 修改代码,把使用Connection对象的地方都在Close()后面加上Dispose()调用。
4 建议对数据库操作进行大的修改,建立自己的数据库操作代理类,继承System.IDisposable接口,强迫释放资源,这样就不会出现连接数量不够的问题了。

解决方法(*):WEB.config 里面:在数据库连接加 Max Pool Size = 512;server=local;uid=;pwd=;database=2004;Max Pool Size = 512;\">一劳永逸。

 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

解决办法:首先要做的是在我们使用连接后立即关闭连接。如果没有关闭连接那么连接将保存到连接池中知道GC来销毁。这种情况下你以为连接池没有到达最大值但实际上连接池已经到达了最大值 其次我们可以通过连接字符串中的Max Pool Size = N;来动态扩大连接池中的连接最大数量。

说明: 

也就是在connectionString中如果未指定max pool size的值,则max pool size=100,当访问人员同时连接数据库的数量为101人时,则等待SqlConnection.ConnectionTimeout设置的时间(默认是15 秒)后,还是没有可用的Connection则会出现上面的错误。

当我们设置为:

"Server=(local); Integrated Security=SSPI; Database=Northwind; Max Pool Size=512; Min Pool Size=5"  时。则访问人员同时连接数据库的数量为513时,则等待SqlConnection.ConnectionTimeout设置的时间(默认是15 秒)后,还是没有可用的Connection则 就会出现上面的错误。

         Connection Pool 是什么呢 ?

每当程序需要读写数据库的时候。Connection.Open()会使用ConnectionString连接到数据库,数据库会为程序建立 一个连接,并且保持打开状态,此后程序就可以使用T-SQL语句来查询/更新数据库。当执行到Connection.Close()后,数据库就会关闭当 前的连接。很好,一切看上去都是如此有条不紊。
 
但是如果我的程序需要不定时的打开和关闭连接,(比如说 ASP.Net 或是 Web Service ),例如当Http Request发送到服务器的时候、,我们需要打开Connection 然后使用Select* from Table 返回一个DataTable/DataSet给客户端/浏览器,然后关闭当前的Connection。那每次都Open/Close Connection 如此的频繁操作对于整个系统无疑就成了一种浪费。
 
ADO.Net Team就给出了一个比较好地解决方法。将先前的Connection保存起来,当下一次需要打开连接的时候就将先前的Connection 交给下一个连接。这就是Connection Pool。


        Connection Pool 如何工作的?
首先当一个程序执行Connection.open()时候,ADO.net就需要判断,此连接是否支持Connection Pool (Pooling 默认为True),如果指定为False, ADO.net就与数据库之间创建一个连接(为了避免混淆,所有数据库中的连接,都使用”连接”描述),然后返回给程序。

如果指定为 True,ADO.net就会根据ConnectString创建一个Connection Pool,然后向Connection Pool中填充Connection(所有.net程序中的连接,都使用”Connection”描述)。填充多少个Connection由Min Pool Size (默认为0)属性来决定。例如如果指定为5,则ADO.net会一次与SQL数据库之间打开5个连接,然后将4个Connection,保存在 Connection Pool中,1个Connection返回给程序。

 
当程序执行到Connection.close() 的时候。如果Pooling 为True,ADO.net 就把当前的Connection放到Connection Pool并且保持与数据库之间的连接。

同时还会判断Connection Lifetime(默认为0)属性,0代表无限大,如果Connection存在的时间超过了Connection LifeTime,ADO.net就会关闭的Connection同时断开与数据库的连接,而不是重新保存到Connection Pool中。

(这个设置主要用于群集的SQL 数据库中,达到负载平衡的目的)。如果Pooling指定为False,则直接断开与数据库之间的连接。

 
然后当下一次Connection.Open() 执行的时候,ADO.Net就会判断新的ConnectionString与之前保存在Connection Pool中的Connection的connectionString是否一致。

(ADO.Net会将ConnectionString转成二进制流,所 以也就是说,新的ConnectionString与保存在Connection Pool中的Connection的ConnectionString必须完全一致,即使多加了一个空格,或是修改了Connection String中某些属性的次序都会让ADO.Net认为这是一个新的连接,而从新创建一个新的连接。所以如果您使用的UserID,Password的认 证方式,修改了Password也会导致一个Connection,如果使用的是SQL的集成认证,就需要保存两个连接使用的是同一个)。

然后 ADO.net需要判断当前的Connection Pool中是否有可以使用的Connection(没有被其他程序所占用),如果没有的话,ADO.net就需要判断ConnectionString设 置的Max Pool Size (默认为100),如果Connection Pool中的所有Connection没有达到Max Pool Size,ADO.net则会再次连接数据库,创建一个连接,然后将Connection返回给程序。

如果已经达到了 MaxPoolSize,ADO.net就不会再次创建任何新的连接,而是等待Connection Pool中被其他程序所占用的Connection释放,这个等待时间受SqlConnection.ConnectionTimeout(默认是15 秒)限制,也就是说如果时间超过了15秒,SqlConnection就会抛出超时错误(所以有时候如果SqlConnection.open()方法抛 出超时错误,一个可能的原因就是没有及时将之前的Connnection关闭,同时Connection Pool数量达到了MaxPoolSize。)

如果有可用的Connection,从Connection Pool 取出的Connection也不是直接就返回给程序,ADO.net还需要检查ConnectionString的ConnectionReset属性 (默认为True)是否需要对Connection 最一次reset。这是由于,之前从程序中返回的Connection可能已经被修改过,比如说使用 SqlConnection.ChangeDatabase method 修改当前的连接,此时返回的Connection可能就已经不是连接当前的Connection String指定的Initial Catalog数据库了。所以需要reset一次当前的连接。但是由于所有的额外检查都会增大ADO.net Connection Pool 对系统的开销。


相关推荐

  • 做四维彩超的最佳时间 四维彩超是目前先进的彩超技术,它的出现无疑是掀起了一股四维彩超热。很多准妈妈都迫不及待地想要做个四维彩超。那么,做四维彩超的最佳时间是什么时候呢?  【专家提醒】四维彩超检查掌握最佳时间  郑州美中商都妇产医院专家表示,做四维彩超的最佳时间
  • 宿州孕期做四维彩超最佳的时间是什么时候   孕期做四维彩超最佳的时间是什么时候?想要选择一家的妇产医院是现在所有准爸妈最期待的事情。小宁和老公结婚有两年多了,她们终于怀上了“猴宝宝”,现在宝宝已经有3个月了,马上决定去医院做四维彩超的检查。但医生告知他们现在做四维彩超时间还有些早
  • 3年夜时超4000万 时间熊猫3创影史点映票房记实-熊猫-票房-时间_大哥电影网 由黄磊、成龙、利剑百何、王志文、周杰伦、杨幂、肖央、朱珠、王太利、姜武、张国立、张纪中、郭子睿(石头)、黄忆慈(多多)等明星配音,将于1月29日中美同步公映的经典系列动画影戏《光阴熊猫3》在1月23日超前点映中,以3年夜时超4000万的票房
  • 多功能LED灯具老化生产线 隔离 多电压冲击 一线多用 超短老化时间 尽在力拓 多功能LED灯具老化生产线隔离,多电压冲击,一线多用,超短老化时间,节省人工,节省老化电能,尽在力拓设备业务:13823298536陈工LED灯具老化线LED老化检测生产线LED照明灯具生产线led灯具老化生产线高效高容量小占地快速老化线力
  • HSM Pure 530:多功能 大碎纸量 碎宽幅打印纸 超长碎纸时间 高节能 简述:专业多功能碎纸机,新颖现代的立体感外观设计,光电控制自动启动/停止开关,压感式紧急停机压板等智能安全操作设置,采用前置式独立抽取纸屑桶,低噪音运转工作,待机超低能耗等诸多优秀设计的融合,营造出安静、节能、环保、安全的操作使用办公环境。
  • 开始日期不能超过结束时间的check - keenweiwei的专栏 - 博客频道 - CSDN.NET 1,http://www.win7xz.com/,winform#region日历控件privatevoiddteStartDate_Validating(objectsender,CancelEventArgse){if(,番茄花园xp系
  • 快速获取公网同步时间1.0绿色版(公网IP获取器)下载,高速下载 快速获取公网同步时间1.0绿色版(公网IP获取器)软件标签:快速获取公网同步时间公网IP获取器软件授权:绿色版更新时间:2013-01-0109:55:37软件类型:国产软件软件大小:1.91MB软件语言:简体中文 应用平台:Win2000
  • dede获取时间日期格式代码大全_福州SEO网站优化_ dede获取时间日期格式代码大全_福州SEO网站优化_DEDECMS利用strftime()函数格式化时间的所有参数详解,包括年份日期进制、小时格式等,日期时间格式(利用strftime()函数格式化时间)0首页:([field:pubda
  • EMS快递未到,官网却写本人已签收并且快递超时 EMS快递未到,官网却写本人已签收并且快递超时在京东买了个手机,他们走的是邮政的EMS,已经五天了还没有收到东西,在官网用邮编查询用时,说1.5天就够了,这已经5天了还没看见个影子。这样也就罢了,多次在EMS官网上留言咨询、投诉货单,人家连
  • android 获取mac_address 众所周知在安卓开发中,我们经常使用WifiManager获取MAC地址做设备映射,但会出现这样那样的问题,比如说开了WIFI获取不到地址了、不开WIFI获取不到地址了、刚开机获取不到地址了、网卡未启动获取不到地址了.publicstatic
  • 用Delphi获取当前系统时间 在开发应用程序时往往需要获取当前系统时间。尽管Y2K似乎已经平安过去,但在我们新开发的应用程序中还是要谨慎处理“时间”问题。在《融会贯通--Delphi4.0实战技巧》(以下简称“该书”)第89页专门介绍了两种获取当前系统时间的方法,但这两
  • 用Delphi获取当前系统时间 在开发应用程序时往往需要获取当前系统时间。尽管Y2K似乎已经平安过去,但在我们新开发的应用程序中还是要谨慎处理“时间”问题。在1999年7月出版的文献《融会贯通--Delphi4.0实战技巧》(以下简称“该书”)第89页专门介绍了两种获取当

你的评论

就没有什么想说的吗?

最新博客

关于我们 免责声明 移动版

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X