我有一个供应商报告产品执行查询以提取报告数据,没有插入,没有更新只是读取数据.
我们的堆大小增加了3倍,现在是1024个4k页,应用程序将运行一周,然后我们将开始看到DB2 SQL错误:SQLCODE:-954,SQLSTATE:57011表示事务日志无法适应请求.
它不是报告的大小,因为它们在回收后运行良好.我就此与另一位DBA进行了交谈.他认为问题在于ORACLE和DB2之间的区别在于供应商代码很糟糕而且没有对选择发出提交.这导致引用不被清理,并且在堆中慢慢累积为垃圾.
我想知道这是否准确,因为我认为只需要包含提交所需的插入和更新.有关于此的任何IBM文档吗?
我们目前每周都在回收以缓解这个问题,但在回到供应商要求他们改变代码之前,我希望能够很好地处理这个问题.
任何交易都需要正确终止 - 为什么你认为这只适用于插入和更新?考虑以交易方式运行"从b中选择a,其中c> 12",然后"从b中选择a,其中c <= 12"; 在一个事务中,DB必须保证每个a从第一个或第二个select中返回一次,而不是两者(假设c永远不为null ;-).没有事务性,如果相应的c被不同的事务更改,那么一些可能会落在裂缝之间或者返回两次,而这不是ACID! - )
所以,当你没有需要单独SELECT查询是事务WRT对方,告诉DB!而你所说的方式是通过在每次选择之后终止事务(通常提交是你用于此目的的,尽管我猜你可以,无差别地选择在这里使用回滚;-).