我们正在rails 3.2.12(ruby 1.9.3)上运行一个ruby on rails应用程序,当前的tinytds gem是0.6.2。
我们使用MS SQL 2012或2014,面临的错误消息比通常情况下更多:
TinyTds::Error: Adaptive Server connection timed out: EXEC sp_executesql [...]
数据库自动关闭关闭。
TCP套接字超时是默认的Windows系统。
应用程序服务器位于计算机1(Windows服务器)上,SQL服务器位于计算机2(Windows服务器)上。
当我检查连接(netstat)时,我已经为大约20-30个用户打开了250个连接。
我运行perform.exe以查看数据和日志磁盘在SQL Server上的空闲时间。
database.yml有连接
pool:32
和reconnect:true
。在我看来,Tinytds失去了连接,任何异常都会阻止重新连接。
问题是,如何调试问题以找出问题所在?
更新
我的错误,原始错误消息属于tinytds 0.5.x。自从我更新到最新版本后,我还收到以下错误,或者改为:
ActiveRecord::LostConnection (TinyTds::Error: DBPROCESS is dead or not enabled: BEGIN TRANSACTION):
最佳答案
首先,游泳池的大小似乎太大了。你在用很多线吗?如果没有,则每个应用程序请求/响应将只使用一个连接。只是看起来这个值太高了。
第二,什么sql超时了?您是否发现某些sql比其他sql慢?如果是,那么你有两个选择。第一种方法是使用标准实践(如索引等)优化数据库,第二种方法是增加database.yml中的“timeout”选项。默认超时为5000,即5秒。你试过把它设为10000吗?我想我要问的是,你怎么确定这是“连接”超时还是“等待”超时?