我在Interbase 7.5中遇到了一个非常奇怪的问题,它似乎被卡住了。
我可以使用IBConsole ->来跟踪问题右键单击DB -> Performance Monitor -> Transactions
通常,此列表应该只显示几个活动事务。但当我启动我的应用程序(使用Delphi7 Interbase组件的apache web服务器的web模块,例如IBQuery、IBTransaction等)时,我会收到数百个活动事务。
事务类型始终作为快照列出,如果这是相关的。
我已经对所有sql语句进行了三次检查,但找不到任何会产生此类问题的语句……
有没有办法获取特定事务的sql语句?
任何其他如何找到这样的问题的建议都将是非常受欢迎的。
发布于 2013-02-26 23:45:51
有没有办法获取特定事务的sql语句?
可以,您可以从TMP$STATEMENTS WHERE TRANSACTION_ID = ...中选择。这是出于记忆,但应该可以让您开始使用。
在IB性能监视器中,可以使用工具栏上的按钮从[语句]选项卡中找到事务。我不记得你能不能在那个应用里走另一条路了。我已经很久没有写过了!
发布于 2013-02-20 01:07:48
活动的IBX数据集始终需要活动的事务。如果您没有活动数据集,请不要忘记提交所有活动事务。
如果您有活动的数据集,则可以将所有组件配置为使用相同的TIbTransaction对象,还可以通过IdleTimer和DefaultAction属性将唯一的TIbTransaction配置为在空闲超时后提交或回滚。
终止事务(通过手动或自动提交或回滚)将关闭所有链接的数据集(TIBQuery、TIBTable等)。
您可能会尝试使用CommitRetaining或RollbackRetaining方法来终止事务,而不关闭相关的数据集,但这可能会影响服务器的性能,我的建议是始终避免使用它。
如果您想要改进您的应用程序,您应该考虑更改数据库连接层或在IBX上引入具有内存功能的数据集,例如,Delphi的TClientDataSet,它允许您检索数据并将其保留在内存中,同时关闭所有底层数据集(和事务),同时允许您使用传统的插入/追加/编辑/删除方法来修改数据,然后在新的短时间事务中将这些更改应用于数据库。
https://stackoverflow.com/questions/14962997
复制相似问题