我有一个表,可以在一秒钟内从数千次中插入、更新和选择。不过,我有僵局问题。
似乎是与插入冲突的更新导致了死锁。
这个例子是1比1的存储过程,唯一的区别是名称。假设1和2,而不考虑存储过程的名称。
发布于 2011-01-21 23:44:55
将更新更改为与(ROWLOCK)一起使用。这将减少从页面级别到行级别的锁。您也可以在插入件上尝试同样的方法。
发布于 2011-01-22 02:06:35
您也可以在proc的开头尝试,将隔离级别设置为快照。欲了解更多信息,请访问:http://msdn.microsoft.com/en-us/library/ms173763.aspx
您将在tempdb中为行版本控制付出一些代价。
发布于 2013-03-03 23:59:26
我会重新设计应用程序,这样行就可以成批保存。通常情况下,500到1000行的批处理对我来说很好,但是您需要运行自己的测试。在保存批处理之前,我将使用sp_getapplock序列化批处理更新。
当然,这种序列化会稍微降低修改的速度,但批量保存比对其补偿更多,所以总的来说,这样做的速度要快得多,逐行保存。
另外,我将使用快照隔离级别运行我的选择,这样它们就会被修改所阻止。
这样做了,您可能根本就没有死锁--我们的混合负载系统中没有死锁,您也可以这样做。
祝好运!
https://dba.stackexchange.com/questions/779
复制相似问题