gpt4 book ai didi

sql-server - 在表中插入数据时如何避免表锁

转载 作者:行者123 更新时间:2023-12-02 02:21:04 29 4
gpt4 key购买 nike

在我们的应用程序中,我们通过 C# 代码在事务中的 15 个表中插入记录。为此,我们为每个表创建一个插入语句,并将所有语句追加到一个查询中,并使用“ExecuteNonQuery”在表中插入记录。因为,我们希望在所有表中进行插入并且不希望任何不一致的数据,所以我们在事务中使用它。

此功能是在服务中编写的,服务(相同的服务,不同的安装)不止一次同时执行此任务(将数据插入表中)。这些服务在表中插入完全不同的行,并且不以任何方式依赖。

但是,当我们运行这些服务时,我们会在这些插入语句上遇到死锁。

代码是这样的:

  1. 打开数据库连接
  2. 开始交易
  3. 在表中插入数据
  4. 提交交易。

所有服务都对相同 15 个表中的不同数据集执行这些步骤。

SQL Profiler 跟踪表明在插入时这些表上有独占锁。

您能否建议为什么它应该具有表级锁,同时只是在表上触发插入语句并以死锁结束。什么是最好的预防方法。

最佳答案

您不会仅仅通过锁定表,甚至独占锁定来获得死锁。如果表被锁定,新插入将只等待现有插入完成(假设您没有使用 no wait 提示)。

当您以 sql 语句无法继续的方式锁定资源时,就会发生死锁。在您的插入语句中寻找无限制的子选择或不够具体的 where 子句。

发布你的 sql 以便我们可以看到你在做什么。

关于sql-server - 在表中插入数据时如何避免表锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8135568/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com