问题描述
各位CSDN大虾早~最近一年负责开发公司一个基于REST风格的WEB项目之前由于客户数量少的缘故,调用频率一直不高,导致这个问题一直没发现前段时间调用频率上升,数据库链接数也随着增加,隔三差五会出现数据库链接中断等问题现在程序情况是客户每调用一次,都会创建一个ConnBus想请教该如何处理较好?先谢谢了
解决方案
解决方案二:
可以用日志记录一下每一种业务占用连接的时间长短。然后确定一个标准,比如说,低于200毫秒是好的,而高于2秒钟肯定是不能接受的。另外就是将任务分解出一些异步线程,甚至多个进程。例如一些类型的操作可以先放到数据库中,然后每当过一段时间才批量处理一次。这个处理是在其它进程中做的,甚至是分布到其它机器去做(当你又希望减小当前机器负载,同时又希望尽早提前开始异步任务时,就需要水平扩展任务服务器)。如果你没有很好地使用缓存,那么使用缓存可能是效果最显著的。它可以立刻让你的性能提高几十倍,让你的同时连接数减少10倍。
解决方案三:
虽然许多“技术的”手段看似都挺“技术化的”,但是我还是通常会首先去检查访问数据的事务的时间长短。我认为一个事务如果超过2秒钟就很可能是一个设计bug了。(你可以自己问问自己,你们的事务是否经常有更长的执行时间?!)我认为先全面清理一遍最基本的设计误区,然后再考虑那些纯技术手段,这样比较容易见效。一些程序员喜欢推卸责任。当他折腾什么缓存之类的“相当技术化的”东西之后,他就不愿意去承认自己设计的数据库事务太冗长的问题了。
解决方案四:
用户读写数据库肯定是要创建连接的,你要做的就是在用户读写时才去连接数据库,读写完成马上释放连接!
解决方案五:
对于使用.net中的连接来说,每一次访问数据都创建一个逻辑连接,是必须的。不但需要创建,而且要及时(比如说200毫秒)释放掉。因为这些逻辑连接是重复使用连接池里的物理连接所必须的。反而是,那种认为“应该共享逻辑连接,不应该及时释放逻辑连接”的想法才是错误的。
解决方案六:
每一次访问数据库都创建新的逻辑连接,跟减少访问数据库次数,这是两个不矛盾的东西。不要搞不清楚之间的关系。每一次访问数据库都要创建逻辑连接,是编程所必须的。是必较低级的编程知识。减少数据库访问次数,提高你的web的响应速度和并发吞吐能力,是设计问题。比简单的编程问题要高级多了。
解决方案七:
引用3楼SmileSkyNet的回复:
用户读写数据库肯定是要创建连接的,你要做的就是在用户读写时才去连接数据库,读写完成马上释放连接!
恩,这个目前是读写完后就立马释放链接了
解决方案八:
引用5楼sp1234的回复:
每一次访问数据库都创建新的逻辑连接,跟减少访问数据库次数,这是两个不矛盾的东西。不要搞不清楚之间的关系。每一次访问数据库都要创建逻辑连接,是编程所必须的。是必较低级的编程知识。减少数据库访问次数,提高你的web的响应速度和并发吞吐能力,是设计问题。比简单的编程问题要高级多了。
先谢谢的大神的回复!目前项目业务占用连接时间我测试过,有几个业务时间在1秒左右,我会往这方面进行调整另外,你提到的缓存,我有所考虑,可具体到项目实施上又有些迷茫,不知该如何运用缓存我们系统是OMS系统,客户可以调用我们提供的webapi创建/查询/批量处理订单数据创建/批量处理都是一次性的,不能缓存查询我认为每次应该都从数据库读取最新的数据,也无法缓存还请点拨一下