保持SQL游标打开的“合理”时间长度是多少?

时间:2008-08-14 06:07:53

标签: sql cursors

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

以及在哪个数据库上?

5 个答案:

答案 0 :(得分:8)

我可能会因此受到抨击,但你真的应该尽量避免使用游标,因为它们会导致严重的性能损失。如果你必须使用它,你应该尽可能地保持它开放的最小时间,以便尽快释放光标阻塞的资源。

答案 1 :(得分:5)

交易:分钟。

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

当您考虑我们处于高可用性Web环境中时,这不是很荒谬,必须运行sql server,我们甚至不允许存储过程,因为无法准确地版本和维护它们。如果我们使用oracle可能。

答案 2 :(得分:2)

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

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

  • 如果是具有大量用户的生产网站环境,请确保在有人超时之前光标消失。
  • 如果您 - 例如 - 在专有机器上编写“日志分析存储过程”(或其他任何内容),则不做其他事情:随意做任何您想做的事情。你将是唯一一个不得不等待的人。由于您使用游标,因此数据库服务器不会因此而死亡。但是,您应该考虑使用行为可能会随着时间的推移而发生变化,并且在某些时候可能会有10个人使用该应用程序。所以试着找另一种方式;)

答案 3 :(得分:2)

@lomaxx,@ ChanChan:据我所知,游标只是SQL Server和Sybase(T-SQL变体)的问题。如果你选择的数据库是Oracle,那么游标就是你的朋友。我已经看过许多使用游标实际上提高了性能的情况。游标是一个非常有用的机制,并说“如果你使用光标我们解雇你”这样的事情有点荒谬。

话虽如此,您只想保持光标打开以获得所需的绝对最小值。如果不了解问题域,指定最长时间将是任意且毫无意义的。

答案 4 :(得分:2)

@ninesided:除了性能问题之外,它还涉及使用正确的工具来完成工作。如果选择将光标从查询中移出代码,我会认为在100次中有99次将循环逻辑放入某种托管代码会更好。这样做可以让您获得使用调试器,编译时错误检查,输入安全等等的优势。

我对这个问题的回答仍然是一样的,如果你正在使用游标,请尽快关闭它,在oracle中我也会尝试使用显式游标。