我对Interbase 7.5中的事务有一个非常奇怪的问题,似乎卡住了。
我可以跟踪IBConsole的问题 - >右键单击DB - >性能监视器 - >交易
通常此列表应仅显示一些活动事务。但是当我启动我的应用程序(使用Delphi 7 Interbase组件的apache webserver的Web模块,例如IBQuery,IBTransaction,......)时,我得到了几百个活动事务。
交易类型始终列为快照,如果这是相关的。
我已经对所有sql语句进行了三重检查,但找不到任何会产生此类问题的内容......
有没有办法获取特定交易的sql语句?
非常欢迎任何其他建议如何找到这样的问题。
答案 0 :(得分:2)
Active IBX数据集始终需要活动事务。如果您没有活动数据集,请不要忘记提交所有活动事务。
如果您有活动数据集,则可以将所有组件配置为使用相同的TIbTransaction
对象,还可以通过{配置唯一的TIbTransaction在空闲超时后提交或回滚{ {1}}和IdleTimer
属性。
终止交易(通过手动或自动提交或回滚)将关闭所有链接的数据集(DefaultAction
,TIBQuery
等。)
您可能很想使用TIBTable
或CommitRetaining
方法终止事务而不关闭相关数据集,但这可能会影响服务器的性能,我的建议是始终避免使用它。
如果要改进应用程序,应考虑更改数据库连接层或在RollbackRetaining
上引入内存容量数据集,例如,Delphi的IBX
,它允许您检索数据并在关闭所有底层数据集(和事务)时将其保留在内存中,同时允许您使用传统的Insert / Append / Edit / Delete方法修改数据,然后在新的短时事务中将更改应用于数据库
答案 1 :(得分:2)
有没有办法获取特定交易的sql语句?
是的,您可以从TMP$STATEMENTS WHERE TRANSACTION_ID = ...
中选择。这是来自记忆,但应该让你开始。
在IB性能监视器中,您可以使用工具栏上的按钮从“语句”选项卡中找到事务。不记得你是否可以在该应用程序中采用其他方式。我写这篇文章已经很久了!