使SQL游标保持打开状态的"合理"时间长度是多少?

时间:2020-03-05 18:39:33  来源:igfitidea点击:

在应用程序中,在提交或者回滚之前使事务保持打开状态的"长时间"是什么?分钟?秒?小时?

在哪个数据库上?

解决方案

回答

交易:分钟。

游标:最多0秒,如果我们使用游标,我们将解雇我们。

当我们认为我们处于必须运行sql server的高可用性Web环境中,并且由于无法准确地版本化和维护它们而我们甚至不允许存储proc时,这并不是很荒谬的。如果我们正在使用oracle的话。

回答

我可能为此感到恼火,但是我们确实应该尝试避免使用游标,因为它们会严重影响性能。如果必须使用它,则应使其保持打开的绝对最小时间量,以使我们尽快释放被游标阻塞的资源。

回答

通常,我同意其他答案:尽可能避免使用游标(在大多数情况下),并尽可能快地关闭它们。

但是:这完全取决于我们所处的环境。

  • 如果这是一个有很多用户的生产网站环境,请确保在有人超时之前光标消失了。
  • 例如,如果我们正在专有的机器上编写"日志分析存储过程"(或者其他内容),而该机器什么都不做:请随意做我们想做的任何事情。我们将是唯一需要等待的人。这并不是说数据库服务器会因为使用游标而消失。但是,我们应该考虑,使用行为可能会随着时间而改变,并且在某个时候可能有10个人在使用该应用程序。因此,尝试寻找另一种方法;)

回答

@ lomaxx,@ ChanChan:就我所知,游标只是SQL Server和Sybase(T-SQL变体)上的一个问题。如果我们选择的数据库是Oracle,那么游标就是朋友。我已经看到许多情况下使用游标实际上可以提高性能的情况。游标是一种非常有用的机制,它说诸如"如果使用游标会触发我们"之类的事情有点荒谬。

话虽如此,我们只想将游标保持打开状态即可达到所需的绝对最小值。在不了解问题域的情况下,指定最大时间将是任意且毫无意义的。

回答

@nineside:除了性能问题之外,这还与使用正确的工具进行工作有关。如果可以选择将游标从查询移到代码中,那么我认为100中有99次是最好将循环逻辑放入某种托管代码中。这样做可以让我们获得使用调试器,编译时错误检查,键入saftey等的优点。

我对这个问题的答案仍然是相同的,如果我们使用的是游标,请尽快将其关闭,在oracle中,我也将尝试使用显式游标。