打破长时间运行存储过程(最长20分钟)的最佳方法是什么? 存储过程内部包装在一个事务中。如果我关闭连接,这个事务会被回滚吗? 另一种方法是在启动存储过程之前启动C#中的事务,并且当我想取消存储过程时,我只需要回滚C#事务。打破长时间运行存储过程的最佳方法是什么?
回答
如果关闭连接,则在事务提交之前,如果它注意到断开连接,SQL Server将回滚事务。将会有一个非常小的时间窗口,只要您断开连接,事务就可以完成。
自定义事务增加了复杂性,并且对于单个存储过程调用几乎没有好处。所以我会去断开连接。
感谢您的回答,我决定简单地断开连接并允许SQL Server回滚事务本身。 – Eugene
您可以在三个位置设置超时时间 - 连接,命令,以及如果您最终正在编写网页 - 在页面超时。
在这种情况下的相关超时是命令超时。
更新:取消用户事件: 要取消用户事件的命令,请在命令中调用Cancel()。我没有编写代码来测试这个,但是我怀疑一旦你调用ExecuteReader()它会阻塞,所以你需要一个异步调用BeginExecuteNonQuery(),这真的是一个痛苦的设置 - 它需要在查询字符串额外的东西,我想这需要SQL2005 +
UPDATE:回复:交易 C#(或ADO.NET)交易代码将大约两行代码,并确保存储过程调用(其中可能有更多而不是在今天,也许是从现在开始的一年)中的一个声明)作为一个单元成功或失败。它们通常不是性能差的来源,并且在不使用时可能成为不良性能的来源 - 例如,一系列长插入在事务中运行得更快。
如果你不调用CommitTrans()事务将回滚,你没有显式调用回滚()
我们正在使用SQL Server 2008 R2,所以这不是问题。谢谢。 – Eugene
- 1. 调用每行存储过程的最佳方式是什么?
- 2. 在java程序运行之间存储数据的最佳方式是什么?
- 3. 注册过程开始时间的最佳方法是什么?
- 4. 存储“时间”值的最佳方法
- 5. 在运行时创建绑定的最佳方法是什么?
- 6. 长时间运行的存储过程不在IIS进程中
- 7. 长时间运行的存储过程对性能的影响
- 8. 在ASP.Net应用程序中处理长时间运行的进程的最佳方式是什么?
- 9. 这是长时间运行选择查询运行最佳?
- 10. ADO.NET或传统ADO的长时间运行存储过程
- 11. 从脚本中停止长时间运行的存储过程
- 12. MVC长时间运行的EF存储过程调用
- 13. 使方法运行异步的最佳方式是什么?
- 14. 用C++存储表格的最佳方法是什么?
- 15. 隐藏div onclick并存储cookie的最佳方法是什么?
- 16. 存储徽章标准的最佳方法是什么?
- 17. 在数据库中存储IP的最佳方法是什么?
- 18. 存储类变量的最佳方法是什么?
- 19. 什么是将此存储在NSDictionary中的最佳方法?
- 20. 存储地形状态的最佳方法是什么?
- 21. 存储“涂鸦”数据的最佳方法是什么?
- 22. 存储餐厅checkin count数据的最佳方法是什么?
- 23. 什么是存储截止日期的最佳方法
- 24. 什么是存储临时数据的最佳方式?
- 25. 处理“打开文件过多”的最佳方法是什么?
- 26. 在长时间运行操作完成之前,保存ASP.NET页面的最佳方式是什么?
- 27. 此存储过程需要很长时间才能运行?
- 28. 在Grails应用程序中为长时间运行的作业构建队列的最佳方式是什么?
- 29. 什么是在Windows窗体应用程序中查找长时间运行的代码的最佳方式
- 30. 为什么存储过程不运行?
你试图让用户决定,“嗯,它已经太长时间”,让他取消它,或者你是否试图取消政策“已经20分钟,通话将自动取消” – MatthewMartin
我给这个机会给用户(实际上它是一个支持取消命令的服务)。 – Eugene
好的,我已经更新了我的答案,以添加我的2cent关于事务和asych – MatthewMartin