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