2016-05-14 252 views
6

下面引用的摘录似乎在这一点上是矛盾的。使用'Commit Retaining'是否会影响Firebird性能?

(他们都是很老,我认为,第二个是从2004年第一个提到的Borland所以必须是老一样,所以也许他们是过时的。)

第一似乎表明,提交保留保持交易活跃,从而坚持OIT。第二,如果我理解它意味着在提交保留的情况下,现有的TID被标记为已提交,并且事务保持活动状态,但具有新的TID,因此不会粘住OIT。这第二个摘录与Interbase有关,我不知道这是否能解释看似矛盾。

Firebird Documentation提取物:

随着火鸟(和InterBase的),提交保留导致事务 保持有趣下去。垃圾收集在“标准”Borland RAD工具数据库应用程序和使用提交保留的任何其他 应用程序上有效地停止 。

Embarcadero Blog post提取

读取已提交,读写:

本次交易能够永远没有负面影响的 性能,如果你做了承诺保留不时运行。

+2

火鸟是在2000年从InterBase中分出来的,从那时起它就有了分歧。对于所有的意图和目的,它们应该被认为是不同的数据库,以及它们自己的怪癖等。因此,不要假设为一个描述的限制也适用于另一个。这也适用于诸如_“(和InterBase)”之类的文本,因为它可能指代不再是真实的历史共性。 –

回答

4

当您使用提交保留(使用的API或COMMIT RETAIN)与火鸟,在开始交易并没有真正结束,它只是被从一个新的交易已经在内部开始了一组可见交易的相关,同时也保持旧的活动。

这意味着最旧的有趣和最旧的活动交易不会移动,并且后面的版本会累积起来,直到交易真正落实才能被垃圾收集。这意味着最终查询将需要扫描更长的记录版本链,这可能会对性能产生影响。

我假设可能有一些优化,例如,如果没有在事务中启动的游标打开,则原始事务可能被标记为已提交(保留提交的功能之一是游标未关闭在事务提交时,如果我没有弄错 - 要求旧的事务上下文保持可用)。这可能是InterBase为读取提交事务所做的事情。

这可以通过启动isql会话并结合提交保留做一些插入:如果您组合检查gstat -h,您会注意到,最早的有趣和最旧的活动事务不会移动,直到您真的承诺。

+1

谢谢马克,你已经回答了这个问题,但在我的脑海里可能提出了两倍的问题!也许我会问另一个问题或2,如果我不知道! – kjack

相关问题