【发布时间】: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