2014-12-05 87 views
2

我们在rails 3.2.12(ruby 1.9.3)上运行ruby on rails应用程序,并使用当前tinyTDS gem 0.6.2。TinyTds错误:Adaptive Server连接超时

我们使用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服务器上数据和日志磁盘的空闲时间。

database.yml有连接pool:32reconnect:true

对我来说,它看起来像tinyTDS失去了连接,并防止任何异常重新连接。

问题是,如何调试问题以找出问题所在?

UPDATE

我的错误,原来的错误消息属于tinytDS 0.5.x.由于我更新到最新版本,我得到以下错误的补充或替代:

ActiveRecord::LostConnection (TinyTds::Error: DBPROCESS is dead or not enabled: BEGIN TRANSACTION): 
+0

另外,你编译的FreeTDS版本是什么? – MetaSkills 2014-12-05 12:54:40

+0

例如,运行“tsql -C”将显示系统在大多数情况下具有的功能。 – MetaSkills 2014-12-05 12:55:48

+0

我没有自己安装tinyTDS,我在窗口上使用了“gem install tinytds”。 – YvesR 2014-12-06 14:32:39

回答

3

首先,该池大小似乎过多。你在使用很多线程吗?如果没有,那么每个应用程序请求/响应将只使用一个连接。看起来这个价值是高的。

二,什么SQL超时?你发现某些SQL比别人慢吗?如果是这样,那么你有两个选择。第一种方法是使用索引等标准实践来调整数据库。第二种方法是增加database.yml中的“超时”选项。默认的超时时间是5000秒,即5秒。你有没有试过将它设置为10000?我想我问的是你怎么确定这是一个“连接”超时与“等待”超时?

+0

我们使用瘦服务器,在那里我们运行其中的两个,一个在端口3101上,另一个在端口3102上,前端是处理负载均衡器的apache。我们有一些问题,production.log建议我们增加连接池,这就是为什么这么高。关于连接超时:没有特殊的sql可以创建连接超时,非常简单或复杂的连接超时,它只是有时会发生超时,连接,而不是查询超时。 Timeoutset已经设置为10000。 – YvesR 2014-12-06 14:34:29

+0

需要提一下,我们在线程模式下运行瘦。 – YvesR 2014-12-06 14:55:28

+0

有没有可能与您联系? – YvesR 2014-12-09 20:07:09