出现HJ_BUF_GLOBAL_SIZE设置不当造成应用报错的问题,详细信息如下:
dm.jdbc.driver.DMException: 超出全局hash join空间,适当增加HJ_BUF_GLOBAL_SIZE
at dm.jdbc.driver.DBError.throwException(DBError.java:657)
at dm.jdbc.a.b.p.H(MSG.java:582)
at dm.jdbc.a.b.p.E(MSG.java:542)
......
解决这个问题有两种办法:
1.修改HJ_BUF_GLOBAL_SIZE参数,这个参数是动态参数,可以通过以下命令修改
alter SYSTEM set ‘HJ_BUF_GLOBAL_SIZE’=3000; --具体按照内存大小来确定
2.找到报错的SQL语句进行优化,将hash join优化为nest loop
可以扩大HASH参数大小 (HJ_BUF_GLOBAL_SIZE)
不要过分依赖调整数据库参数HJ_BUF_GLOBAL_SIZE,可以先进行适当的放大参数,如果还是超出hash join空间,说明相关sql可能不是很标准,采用改写的方式。 调整参数也会可能带来内存,执行等待等其他的开销
方法一,是治标不治本;
方法二才是治本的