【发布时间】:2015-05-03 06:43:37
【问题描述】:
我有一个相对较大的系统运行 Rails 和 TinyTds(使用 FreeTds 的 SQLServer 数据库适配器)。问题是我每天收到大约 200 封电子邮件,说我的请求超时或死锁。
[Exception] application#index (ActionView::Template::Error) "TinyTds::Error: Adaptive Server connection timed out: EXEC sp_executesql
它们总是发生在不同的动作上。
A ActiveRecord::DeadlockVictim occurred in transportes#importacao:
TinyTds::Error: Transaction (Process ID 276) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
我不知道为什么它会超时这么多,并且已经在这些电子邮件中苦苦挣扎了将近 2 个月。 我已经尝试更新 gem 版本,FreeTds 的 linux 二进制文件,但没有任何帮助。
目前使用 Ruby 1.9.3-p484、Rails 3.2.16 和 TinyTds 0.6.2
谁能告诉我如何解决这个问题?
【问题讨论】:
-
您将不得不查看 sql server 并查看发生了什么。您的查询/进程都在不同事务中竞争同一个表。
-
我有大约 200 人登录我的系统,同时与 30 个不同的表进行交互。对于所有这些,我打开事务以在数据库上做一些事情。他们每个人都有自己的交易。这不应该是一个问题。你通常不会更新同一行,或删除正在更新的行。关于我必须如何在 SQLServer 上搜索怪异的任何想法?
-
不确定超时,它们总是发生在相同的查询上吗?或任何模式?或者还有什么你能辨别的?服务器调试(mssql 和 rails 方面,但主要是 mssql)可能会有所帮助。但也可以在这里查看github.com/rails-sqlserver/activerecord-sqlserver-adapter/wiki/… 关于 database.yml 与 freetds.conf 中的超时选项。你有任何一套吗?
-
不错。可能是两者的结合,但很可能是超时。
标签: ruby-on-rails ruby-on-rails-3 freetds tiny-tds