当查阅ODI变量的历史数据时出现“内存溢出错误“的消息
应用:
Oracle Data Integrator - 版本: 3.2.03.01及以后发行的版本
本文档的信息可以应用到任何平台
现象
当查阅ODI变量的历史数据时,显示下面的消息:
Error
java.lang.OutOfMemoryError
尽管ODI_MAX_HEAP 已经增加到256M
当增加参数到512M时,这消息就不会出现,但是它需要几分钟才显示数据
到底是有什么问题呢?
原因
有时候,ODI变量被刷新的频率会避开管理员的注意
这可能是个特例,涉及Historize 模式下使用的ODI变量。也就是说,这类型被刷新的变量和结果值储存在ODI工作资源库里
一段时间后,工作资源库可能包含一个指定变量的成千上万的记录。如果这个时候查阅历史数据,则整个集合的值装载在内存里,会负面影响内存资源和性能
解决方案
最好的实践就是定期的从历史ODI变量表里删除数据
下面是资源库显示清单的说明:
ODI变量
使用变量的上下文
与给定上下文里的变量相关的历史记录的序号
变量被使用的最早和最近的日期
select VAR_NAME, CONTEXT_CODE, count(*), min(FIRST_DATE), max(FIRST_DATE)
from <REP_SCHEMA>.SNP_VAR_DATA
group by VAR_NAME, CONTEXT_CODE
其中:<REP_SCHEMA>是物理架构,包含工作资源库和变量
推荐定期清理频繁刷新的变量的历史记录
为了做这个,首先要编辑变量并且点击历史标签上的垃圾图标
如果标签不能进入,联系oracle支持,他们会指导你如何用适当的SQL指令来操作
例如,使用下面的指令清理'myVar' 变量
delete <REP_SCHEMA>.SNP_VAR_DATA
where VAR_NAME = 'myVar'
and FIRST_DATE < sysdate - 7
上述方案的影响就是它删除了所有超过7天的ODI变量,如果有情境依赖于变量最后一次的值,则该值将会丢失