Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用ruby/sequel/tinytds避免基于docker的sql server死锁?_Sql Server_Ruby_Deadlock_Sequel_Tiny Tds - Fatal编程技术网

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

Sql server 如何使用ruby/sequel/tinytds避免基于docker的sql server死锁?,sql-server,ruby,deadlock,sequel,tiny-tds,Sql Server,Ruby,Deadlock,Sequel,Tiny Tds,我正在从事一个服务器端rails ish项目,该项目支持配置您选择的数据库,到目前为止,您的选择是MySql和PostgreSQL。我们正在尝试支持MS SQL Server。如果我们使用他们的docker容器(),就会立即出现死锁,很可能是由于调用某种同步引起的 我在上找到了Jeff Atwood关于使用nolock修饰符解决SQL Server死锁的文章,但我没有找到一种方法将其作为Sequel连接字符串的选项(“Sequel”是Ruby ORM,而不是MS产品), 而且在任何情况下,Seq

我正在从事一个服务器端rails ish项目,该项目支持配置您选择的数据库,到目前为止,您的选择是MySql和PostgreSQL。我们正在尝试支持MS SQL Server。如果我们使用他们的docker容器(),就会立即出现死锁,很可能是由于调用某种同步引起的

我在上找到了Jeff Atwood关于使用
nolock
修饰符解决SQL Server死锁的文章,但我没有找到一种方法将其作为
Sequel
连接字符串的选项(“Sequel”是Ruby ORM,而不是MS产品), 而且在任何情况下,Sequel ORM和tinytds SQL Server适配器的相互作用似乎总是通过
synchronize

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


还有其他人碰到过这个吗?有人有解决方案吗?

我会公开说“在所有查询上抛出
nolock
并不是避免死锁的好策略”。您能提供死锁xml进行分析吗?首先,我不能添加'nolock',因为我们使用的是一个抽象底层SQL的ORM。这只是一堆ruby电话,比如
销售人员。where(姓名:“J B Briggs”,月份:“Feb”)。update(“commission”,100)。save
没有机会做
nolock
。死锁xml会在哪里?理解。我想说的是,即使你能遵循这个指导,也有很多不好的原因。至于死锁图,如果您使用的是SQL 2008或更高版本,那么您应该能够设置一个扩展事件会话来捕获它。