gpt4 book ai didi

c# - 异常 : Deadlock

转载 作者:可可西里 更新时间:2023-11-01 08:33:03 28 4
gpt4 key购买 nike

当我尝试在 C# 中从 SQL 数据库中获取数据时,生成了这两个异常:

System.Data.SqlClient.SqlException: Transaction (Process ID 97) was deadlocked on lock resources with another process and has been chosen as the deadlock victim.

System.Data.SqlClient.SqlException: Transaction (Process ID 62) was deadlocked on lock resources with another process and has been chosen as the deadlock victim.

System.Data.SqlClient.SqlException: Transaction (Process ID 54) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

这是代码:

 using (SqlConnection con = new SqlConnection(datasource))
{
SqlCommand cmd = new SqlCommand("Select * from MyTable Where ID='1' ", con);
cmd.CommandTimeout = 300;
con.Open();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
con.Close();
return ds.Tables[0];
}

这些每次都会发生。

关于如何解决这些问题有什么想法吗?

最佳答案

您可以采取一些措施来减少收到的死锁数量,还可以采取一些措施来完全消除死锁。

首先,启动 SQL Server Profiler 并告诉它给你一个 deadlock graph .运行此跟踪将告诉您与您的冲突的其他 查询。您的查询非常简单,但我严重怀疑您是否对系统中名为 MyTable 的表进行了 SELECT * 查询...

无论如何,有了死锁图和其他查询,您应该能够判断哪些资源处于死锁状态。经典的解决方案是更改两个查询的顺序,以便以相同的顺序访问资源——这避免了循环。

您可以做的其他事情:

  • 通过对查询应用正确的索引等方式加快查询速度。
  • 在数据库上启用快照隔离并在适当的事务中使用SET TRANSACTION ISOLATION LEVEL SNAPSHOT。同时启用 read committed with row-versioning .在许多情况下,这足以完全消除大多数死锁。阅读有关事务隔离级别的信息。 Understand你在做什么。

关于c# - 异常 : Deadlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4312563/

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