简单更新命令导致SqlException Execution Timeout Expired

Simple update command causes SqlException Execution Timeout Expired

我有一个将 mssql-db(源)转换为另一个 mssql-db(目标)的应用程序。对于源代码中的每个 table,我基本上都获取了所有行,并将每一行插入到我的目标中。我 运行 一个简单的查询,它更新源行以存储目标-table 和插入目标数据库的记录的目标 ID:

var commandText = $"UPDATE SOURCE_TABLE SET SOURCE_TABLE.TARGET_ID = '{target_id}', SOURCE_TABLE.TARGET_TBL = '{target_table}' WHERE SOURCE_TABLE.ID = '{id}'";

base.Source.ExecuteNonQuery(commandText);

在我尝试更新特定 table 的源行之前,这 运行 非常好。我得到一个 SqlException Execution Timeout Expired

我检查了变量 target_id、target_table 和 id 它们都填充了有效值。我已禁用所有触发器并且 id 字段是主键。

当我通过management-studio 运行这个命令时,没有问题。甚至不需要一秒钟的时间来处理。


我使用管理工作室的 activity-monitor 来监视 sql 运行 的时间。带有红色框的数据库是目标数据库。 第二个图表中的每个峰值 ("Wartende Tasks" = "waiting tasks")。代表查询已尝试执行一次。


命令是这样执行的:

public int ExecuteNonQuery(string commandText)
{
    using (var connection = this.CreateConnection()) // new SqlConnection(CONNECTION_STRING)
    {
        connection.Open();
        using (var command = connection.CreateCommand())
        {
            command.CommandText = commandText;

            return command.ExecuteNonQuery();
        }
    }
}

您能否尝试在查询之前添加一个开始事务,然后在查询之后添加一个提交事务?我会尝试在源上插入和在目标上更新。

问题是,在源上进行更新的进程被在源上进行 select 的进程阻塞。我必须将它们包装到交易中才能使用 IsolationLevel.ReadUncommitted。现在可以了。