我正在开发一个服务器端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
不是一个很好的解决方案。
有没有其他人遇到这个?有人有解决方案吗?