Interbase事务监控

时间:2013-02-19 16:53:15

标签: delphi transactions interbase

我对Interbase 7.5中的事务有一个非常奇怪的问题,似乎卡住了。

我可以跟踪IBConsole的问题 - >右键单击DB - >性能监视器 - >交易

通常此列表应仅显示一些活动事务。但是当我启动我的应用程序(使用Delphi 7 Interbase组件的apache webserver的Web模块,例如IBQuery,IBTransaction,......)时,我得到了几百个活动事务。

交易类型始终列为快照,如果这是相关的。

我已经对所有sql语句进行了三重检查,但找不到任何会产生此类问题的内容......

有没有办法获取特定交易的sql语句?

非常欢迎任何其他建议如何找到这样的问题。

2 个答案:

答案 0 :(得分:2)

Active IBX数据集始终需要活动事务。如果您没有活动数据集,请不要忘记提交所有活动事务。

如果您有活动数据集,则可以将所有组件配置为使用相同的TIbTransaction对象,还可以通过{配置唯一的TIbTransaction在空闲超时后提交或回滚{ {1}}和IdleTimer属性。

终止交易(通过手动或自动提交或回滚)将关闭所有链接的数据集(DefaultActionTIBQuery等。)

您可能很想使用TIBTableCommitRetaining方法终止事务而不关闭相关数据集,但这可能会影响服务器的性能,我的建议是始终避免使用它。

如果要改进应用程序,应考虑更改数据库连接层或在RollbackRetaining上引入内存容量数据集,例如,Delphi的IBX,它允许您检索数据并在关闭所有底层数据集(和事务)时将其保留在内存中,同时允许您使用传统的Insert / Append / Edit / Delete方法修改数据,然后在新的短时事务中将更改应用于数据库

答案 1 :(得分:2)

  

有没有办法获取特定交易的sql语句?

是的,您可以从TMP$STATEMENTS WHERE TRANSACTION_ID = ...中选择。这是来自记忆,但应该让你开始。

在IB性能监视器中,您可以使用工具栏上的按钮从“语句”选项卡中找到事务。不记得你是否可以在该应用程序中采用其他方式。我写这篇文章已经很久了!