【问题标题】:Limit or abort a Sql Server transaction initiated by Asp.Net限制或中止由 Asp.Net 发起的 Sql Server 事务
【发布时间】:2013-03-16 01:12:46
【问题描述】:

目标:限制在 Asp.Net 网页上启动的 Sql Server 事务的持续时间。

一个事务不止一个命令,所以 SqlCommand.CommandTimeout 不够强。

场景:Asp.Net 页面执行以下操作:

SqlConnection connection = new SqlConnection("yourserver");
connection.Open();
tran1 = connection.BeginTransaction();
command.Transaction = tran1;
command.CommandText = "select lots of stuff";
command.ExecuteScalar()
command.CommandText = "select some more stuff";
command.ExecuteScalar()
command.CommandText = "update some stuff";
command.ExecuteScalar()
tran1.Commit();
connection.Close();

如果所有工作花费的时间太长,一路锁定资源,那么我们希望该事务被中止,无论它在哪里,要么由 Sql Server 本身,要么由 Asp.Net。此外,如果启动它的客户端计算机掉出窗口。

如果 Asp.Net 中止执行,但让事务处于打开状态,或者 Sql 命令仍在运行,那么这还不够好。这一切都是为了保护所有其他用户免受一个人过于繁重的工作。然后那个人需要重新考虑他的工作的大小,把它分成更小的块。

在 Asp.Net 中,我查看了 ExecutionTimeout、ScriptTimeout、CommandTimeout。 在 Sql Server 中,我查看了 QUERY_GOVERNOR_COST_LIMIT 和 LOCK_TIMEOUT。

这些似乎都没有达到目标。

有什么想法吗?

【问题讨论】:

  • 更好地接受你得到的答案,乞丐不是选择者。
  • 是的,你说的很对。得分。

标签: sql-server rollback transactions


【解决方案1】:

TransactionScope 自动管理事务,可以给它一个超时值。

【讨论】:

  • 啊,我不记得那个了。非常感谢!我会用它做一些测试。虽然我仍然对客户端机器(正在为事务计时)掉出窗口的行为持怀疑态度,可以这么说。或者客户端进程只是崩溃了。恐怕会发现事务将在 Sql Server 中保持打开状态。但是让我做一些测试并在这里报告。
  • SQL Server 将检测到断开连接的客户端(一段时间后...)并终止连接和事务。需要衡量所花费的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
相关资源
最近更新 更多