我们正在 Rails 3.2.12 (ruby 1.9.3) 上使用当前的tinyTDS gem 0.6.2 运行 Ruby on Rails 应用程序。
我们使用 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
and reconnect:true
.
对我来说,tinyTDS 似乎失去了连接,并且任何异常都会阻止重新连接。
问题是,如何调试问题以找出问题所在?
UPDATE
我的错误,原来的错误消息属于tinytDS 0.5.x。由于我更新到最新版本,我另外收到以下错误:
ActiveRecord::LostConnection (TinyTds::Error: DBPROCESS is dead or not enabled: BEGIN TRANSACTION):
首先,这个池子的大小似乎太大了。您是否使用大量线程?如果不是,则每个应用程序请求/响应将仅使用一个连接。看起来这个价值太高了。
二、什么SQL超时?您是否发现某些 SQL 比其他 SQL 慢?如果是这样,那么您有两个选择。第一个是使用索引等标准实践来调整数据库。第二个是增加database.yml 中的“超时”选项。默认超时为 5000,即 5 秒。您尝试过将其设置为 10000 吗?我想我要问的是你如何确定这是“连接”超时与“等待”超时?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)