4

我们正在使用当前 tinyTDS gem 0.6.2 在 rails 3.2.12(ruby 1.9.3)上运行 ruby​​ on rails 应用程序。

我们使用 MS SQL 2012 或 2014 并面临比平常更多的以下错误消息:

TinyTds::Error: Adaptive Server connection timed out: EXEC sp_executesql [...]

数据库自动关闭已关闭。TCP Socket Timeouts 是默认的 Windows 系统。

应用程序服务器在机器 #1(Windows 服务器)上,SQL 服务器在机器 #2(Windows 服务器)上。

当我检查连接(netstat)时,我为大约 20-30 个用户打开了 250 个连接。我运行 perform.exe 来查看 SQL Server 上数据和日志磁盘的空闲时间。

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

在我看来,tinyTDS 似乎失去了连接,并且任何异常都会阻止重新连接。

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

更新

我的错,原来的错误信息属于 tinytDS 0.5.x。由于我更新到最新版本,因此我另外或相反地收到以下错误:

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

1 回答 1

5

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

二、什么SQL超时?您是否发现某些 SQL 比其他 SQL 慢?如果是这样,那么您有两个选择。第一个是使用索引等标准实践来调整数据库。第二个是增加 database.yml 中的“超时”选项。默认超时为 5000,即 5 秒。您是否尝试将其设置为 10000?我想我要问的是您如何确定这是“连接”超时与“等待”超时?

于 2014-12-05T12:51:29.460 回答