Jer*_*oyd 7 sql-server-2008 deadlock
我有一个表,可以在一秒钟内从数千次中插入、更新和选择。不过我遇到了死锁问题。
每秒 40 次,还有一个来自该表的选择语句,如果条件为真(95% 的时间为真),则使用类似于以下的代码进行更新:
创建过程 AccessFile (@code, @admin) AS
声明@id int、@access 日期时间、@file 字符串
从代码 = @code 的文件中选择 @id=Id、@accessed = 访问、@file = 文件
IF @admin<> 0 IF @accessed 为空开始
设置事务隔离级别读取未提交
更新文件集访问 = getdate() 其中 id = @id
设置事务隔离级别读取已提交
结尾
选择@id 作为Id,@file 作为文件
似乎是更新与导致死锁的插入冲突。
该示例是一个 1 比 1 的存储过程,唯一的区别是名称。假定为 1 和 2,无论存储过程名称如何。
将更新更改为使用WITH (ROWLOCK)。这将减少从页级到行级的锁定。您也可以在插入件上尝试相同的操作。
归档时间: |
|
查看次数: |
801 次 |
最近记录: |