数据库访问超过最大连接数问题?

黑暗行动 2015-10-22 09:12:45
加精
例如:有1个数据库服务器,最大连接数允许300。但是我有1000个c/s结构的客户端采用连接池访问此数据库,如果连接池里面设置最小连接数是1,那么不是已经达到最大连接数300了吗?还有700个客户端怎么办?

请问采用什么样的架构解决此问题?
...全文
37638 70 打赏 收藏 转发到动态 举报
写回复
用AI写文章
70 条回复
切换为时间正序
请发表友善的回复…
发表回复
费恩 2018-04-29
  • 打赏
  • 举报
回复
随便翻翻,也是醉了,一群人傻说,还没题主懂得多,这种水平就别来回答题主的问题了,什么是连接池还要题主解释
行走的老熊 2017-12-27
  • 打赏
  • 举报
回复
进来学习下,感谢楼主
  • 打赏
  • 举报
回复 1
什么连接池、webService,具体的架构还是得看业务,分析这个客户端cs每次数据库连接操作都得需要多久,如果每个客户端连接数据库都要去执行几分钟或者更长时间保持连接进行数据库操作的话,用什么连接池都没用,都需要占用数据库的连接资源,从而导致其他客户端无法连接。因为你这是每个c/s客户端直连数据库的,不是b/s可以设置一个大的连接池提供给所有客户端使用,所以也就确定了,如果这些客户端都同时连接的话,有多少客户端就必须要有多少个客户端连接,可想而知资源就是这么耗费的。这个在不改业务架构的情况下就是板板钉钉的事情。这个时候怎么办, 1、修改业务需求,由cs转成bs思路,去由同一的数据连接池进行所有的客户端管理; 2、数据库连接其实是可以修改大一点的,才300连接,如果人数多一些,500个用户同时操作数据库,那就不行了么? 3、数据库集群么,弄个几台库,就算每个库只支持300,那4个库也支持理论上也支持1200同时访问了; 4、程序业务优化方面,这个客户端业务嘛 并不是说所有的操作都是需要去直接连数据库的,可以把一些变动少的数据,提取放到内存服务上,提供给客户端访问,这么一来不就减轻了数据库访问了么;
苏生米沿 2015-11-18
  • 打赏
  • 举报
回复
mark了。。不错的
aimsgmiss 2015-11-06
  • 打赏
  • 举报
回复
Defonds 2015-11-06
  • 打赏
  • 举报
回复
END 2015-10-30
  • 打赏
  • 举报
回复
learning
长空X 2015-10-27
  • 打赏
  • 举报
回复
引用 36 楼 x_wy46 的回复:
所以说,连接池也有利有弊,不当情况下开启了连接池是一种浪费的行为,也就是说,你客户端不断地缓存连接,服务器端因为链接资源不足,又不断地去断开客户端端缓存的连接,还不如使用完连接之后,直接老老实实物理断开,交还给数据库服务器 另外说明一下,客户端开启了连接池之后,使用完连接之后你依然要close, 开启连接池的情况下,close的本质是将连接放回连接池, 当下一次再次使用连接的时候,也就是新建一个连接的时候, 比如ado.net的 SqlConnection conn= new SqlConnection ("******") 会去连接池找,如果找到了可用连接(缓存在客户端的,并且没有被服务器踢出的),就直接使用,当然这都是 new SqlConnection ("******")的时候自动完成的 没有开启连接池的情况下,是将连接物理关闭,链接资源交换数据库服务器。
说的非常好啊 而且非常之详细,下在受教了。感谢您打了这么多字
sunylf 2015-10-27
  • 打赏
  • 举报
回复
mark.....
weixin_32312789 2015-10-26
  • 打赏
  • 举报
回复
请问你使用的是什么设备可以1毫秒发送数据?
gw6328 2015-10-26
  • 打赏
  • 举报
回复
用完就会放掉,不是一个客户端对应一个。
zer_uu 2015-10-26
  • 打赏
  • 举报
回复
顶,学习了!!!
  • 打赏
  • 举报
回复
路过,也遇到了同样的问题,学习了
qq_30949279 2015-10-25
  • 打赏
  • 举报
回复
是的。,,,,,,,
铁匠梁 2015-10-25
  • 打赏
  • 举报
回复
完全可以设计一个数据库服务器,屏蔽掉数据库连接
xiaobluesky 2015-10-24
  • 打赏
  • 举报
回复
连接池跟webservice有啥关系,1000个连接同时调webservice就不需要开数据库连接了?? 楼上说的好,数据库厕所提供500个蹲位,只要保证不是被一直500个人蹲着不就行了。。否则5000个人小便又有何妨。。 真是搞不懂你们。。在纠结啥
zhushoudongzhu 2015-10-24
  • 打赏
  • 举报
回复
连接只是个队列问题吧,用双通道试试
  • 打赏
  • 举报
回复
引用 34 楼 chy2z 的回复:
楼上举得这个例子很好,但是“因为他不会永远拉下去”这句话是有问题?你的意思是持续的意思。但是可能会周期拉下去,1分钟拉一次,数据库一般判断连接失效的时间很长(废连接),就会判断一直在使用,根本不会把连接断开让给其他人占用。
比如说秒钟内有1000个数据库连接操作,操作完毕就立刻释放物理连接,于是连接池中有30个物理连接足够应付这1秒钟内的并发业务访问压力了。 而这个30个物理连接“一直在使用、根本不会把连接断开”不但没有问题,而且恰好是连接池与数据库的合理搭配。 当过一段时间,如果另外某个1秒钟之内只有10个数据连接操作,同时也还是操作完毕就及时释放物理连接,这时候连接池实际上只维持5个物理连接就完成了10数据库相关的业务操作,其它25个物理连接已经释放了。
  • 打赏
  • 举报
回复
先去了解下长连接跟短连接的区别吧
专注or全面 2015-10-23
  • 打赏
  • 举报
回复
所以说,连接池也有利有弊,不当情况下开启了连接池是一种浪费的行为,也就是说,你客户端不断地缓存连接,服务器端因为链接资源不足,又不断地去断开客户端端缓存的连接,还不如使用完连接之后,直接老老实实物理断开,交还给数据库服务器 另外说明一下,客户端开启了连接池之后,使用完连接之后你依然要close, 开启连接池的情况下,close的本质是将连接放回连接池, 当下一次再次使用连接的时候,也就是新建一个连接的时候, 比如ado.net的 SqlConnection conn= new SqlConnection ("******") 会去连接池找,如果找到了可用连接(缓存在客户端的,并且没有被服务器踢出的),就直接使用,当然这都是 new SqlConnection ("******")的时候自动完成的 没有开启连接池的情况下,是将连接物理关闭,链接资源交换数据库服务器。
加载更多回复(35)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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