gpt4 book ai didi

c# - SQL Server 2014 在同一数据库表上同时运行超过 60 个更新进程时返回死锁(错误 1205)

转载 作者:太空宇宙 更新时间:2023-11-03 15:42:54 24 4
gpt4 key购买 nike

我在 SQL Server 2014 中有一个数据库。

我运行一个测试来检查同一个表(X 行)上的同步更新场景该测试创建了 X 个线程,它们调用了我的函数 UpdateDB()。每个线程每 30 秒仅更新它的一行(每行线程)。因此,当 2 个线程同时更新同一行时,不存在这种情况。

当我使用 X=59 (rows=threads=59) 运行此测试时 - 一切正常。一旦我增加到 60 行\线程 - 我开始得到:

"Transaction was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction."

如果您需要,我有死锁图。但首先我需要了解 SQL Server 中是否存在我需要更改\增加的限制设置?还有其他想法为什么特定数量的同时更新会导致死锁吗?

谢谢!

UpdateDB(int rowId)
{
using (SqlConnection connection = new SqlConnection(connectionStringDB))
{
try
{
connection.Open();
SqlCommand DBCommand = connection.CreateCommand();
string SQLCommand = string.Empty;

SQLCommand = "UPDATE MyTable SET result = @myResult WHERE ExecutionID = @exID AND RowId = @rowId";

DBCommand.Parameters.Clear();
DBCommand.Parameters.AddWithValue("@exID", CurrentExecutionId);
DBCommand.Parameters.AddWithValue("@rowId", rowId);
DBCommand.Parameters.AddWithValue("@myResult", "OK");

DBCommand.CommandText = SQLCommand;
DBCommand.ExecuteNonQuery();
}
catch (SqlException sqlEx)
{
//here I get 1205
}
}
}

最佳答案

您可能会达到锁定升级阈值,尽管它总是从 59 到 60 个线程非常奇怪。详情见:

https://msdn.microsoft.com/en-us/library/ms184286.aspx

您可以查看的另一件事是您的代码,当每个线程每 30 秒调用一次时,问题出现在 60。与每秒调用2次有关吗?

关于c# - SQL Server 2014 在同一数据库表上同时运行超过 60 个更新进程时返回死锁(错误 1205),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29494842/

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