如何使用ruby / sequel / tinytds避免基于docker的sql server死锁?

时间:2017-03-23 21:19:07

标签: sql-server ruby deadlock sequel tiny-tds

我正在开发一个服务器端rails-ish项目,该项目支持配置您选择的数据库,到目前为止您选择的是MySql和PostgreSQL。我们正在尝试支持MS SQL Server。如果我们使用他们的docker容器(https://hub.docker.com/r/microsoft/mssql-server-linux/),我们会立即遇到死锁,很可能是由于调用某种同步造成的。

我在https://discourse.codinghorror.com/t/deadlocked/275找到了Jeff Atwood关于用nolock修饰符解决SQL Server死锁问题的文章,但是我没有找到一种方法来提供Sequel连接字符串("续集"是Ruby ORM,而不是MS产品), 在任何情况下,看起来像Sequel ORM和tinytds SQL Server适配器的相互作用总是经过synchronize

当我们在Azure机器上以原生形式运行sql server时,我们不会立即遇到死锁,但我们最终会这样做,就像在运行两个小时的测试过程中一样。错误消息指出再次运行命令,但鉴于我们正在使用ORM,这可能发生在我们的代码中的任何地方(我在回溯中看到的一点只是获取表中的行数),所以retry不是一个很好的解决方案。

有没有其他人遇到这个?有人有解决方案吗?

0 个答案:

没有答案