连接数据库时的奇怪问题。
使用asp.net开发网站,使用的sql server数据库,平时程序都正常,但是运行一段时间后,会出现SQL Server 不存在或访问被拒绝。也可能出现,
超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小.
这样的错误,检查程序开连接后都有写关闭,并释放资源。
数据库连接探测也没问题。
虽然这个问题每天会出现几次,但是总觉得不爽。希望有碰到过兄弟讨论一下。
------解决方案--------------------前面项目中也遇到这个问题
仔细梳理了一遍代码,确认在数据库模块所有的代码都关闭连接了
后面用
1、打数据库最新补丁
2、sp_configure 'user connections ',1000
3、打开“控制面板”=》“许可协议”=》“产品:sql server xxxx " 下面选“每服务器” 100个并发连接
然后只要系统运行正常,天要下雨,娘要嫁人,由它去了!
当然我这是不负责的做法,但这样的问题想找到病根确实不容易.
------解决方案--------------------如果是用sqlerver express,那么这种情况一定会出现,因为那个数据库服务在一段时间内没有访问,就会自已停,再次访问时会打开,但是如果打开时速度慢,就可能会出现这种情况.解决方法可以到sqlserver版查一下.
------解决方案--------------------连接肯定都有开闭.出现问题时我第一反应可能没有半闭连接,但是查了所有数据层代码,全部都有关。并且连接池满的情况出现不多。
——————————————————————————————————————————
往往,逻辑东西根本不能用眼睛简单遍历代码。就好像你看得懂一本小说的每一个字但是未必能够理解小说的深意,你认为你的代码都有些了关闭,但是你未必模拟了执行时的全部流程。
最好的办法是用结构来彻底免去猜测流程分析的复杂责任。如果我去查,我会搜索整个解决方案中关于“关闭连接”的代码,如果发现了,就说明程序写错了。因为只应该使用using(){}结构来关闭,而不应该写代码关闭。
------解决方案--------------------性能监视器看下SQL连接的情况,结合IIS流量分析
------解决方案--------------------问一下,当连不上数据库时,
telnet dbserver 1433看是否能连通,如果超时,我觉得时表示网络问题。有可能那一小段时间,网络真的断开了。
还有,日志是否有记录了什么可疑的信息吗?
打开管理工具的“性能”,对sql进行监控。