【问题标题】:Deadlocks in SQL Server 2008 R2SQL Server 2008 R2 中的死锁
【发布时间】:2017-08-26 15:27:14
【问题描述】:

服务器:SQL Server 2008R2 客户:Excel/ADO - 8 个客户 服务器硬件:8核/16GB内存/操作系统:WinServer 2008SR2

插入/更新和合并/匹配存储过程都发生死锁。

我在这里阅读了很多关于插入/更新的内容,因此,我已将插入/更新更改为合并/匹配,但我仍然收到非常频繁的死锁错误(大约每 10 分钟一次),从 8以批处理模式运行的客户端以每分钟 2 次的速率调用更新。

相比之下,每个客户端每分钟向另一个表插入大约 20,000 个项目,完全没有问题。

我希望在解决这些死锁问题方面得到一些帮助,因为我认为这样一个微不足道的 8 个客户端(尤其是 Excel/ADO/VBA)应该能够对这个数据库造成压力!

另外请注意,我不直接通过客户端发出任何 SQL 命令,所有 sql 命令都是通过存储过程调用的。

我现在的SP:

merge [dbo].[File_Level_Data] as TargetMerge
    using(select @Name_of_File as name)as source
    on (TargetMerge.Name_of_File = source.name)

when matched then
    update
    set
    XXX1  = @XXX1, 
    ZZZ25 = @ZZZ25
when not matched then
    insert
    (XXX1,
    ZZZ25
    ) values 
    (
    @XXX1,
    @ZZZ25

);

【问题讨论】:

  • 是否还有其他 SP 也在此表中插入/更新/删除?
  • 使用服务器上运行的默认扩展事件(或使用跟踪标志)并提供死锁xml信息,以便更好地分析。
  • 我找到了导致这种情况的触发器。很抱歉没有尽快登录并回复。

标签: deadlock sql-server-2008-r2 upsert


【解决方案1】:

我的死锁是由几年前我放在那里但不相信它们仍然存在的触发器引起的。一旦我删除它们,就不会再出现死锁了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多