场景一:应用请求数据库报错,-524:超出全局hash join空间,适当增加HJ_BUF_GLOBAL_SIZE。
原因:该报错一般是hash排序空间不够,需要增加 HJ_BUF_GLOBAL_SIZE的参数值,该参数为动态参数,立即生效。一般是由于某sql排序占用hash排序空间超出HJ_BUF_GLOBAL_SIZE值导致,需要监控具体sql优化,或者根据整体空间内存使用,调整参数值大小。
相关参数含义:
参数 | 属性 | 默认值 | 说明 |
HJ_BUF_GLOBAL_SIZE | 动态,系统级 | 5000 | HASH 连接操作符的数据总缓存大小(>HJ_BUF_SIZE),系统级参数,单位 MB。取值范围 10~500000 |
HJ_BUF_SIZE | 动态,会话级 | 500 | 单个 HASH 连接操作符的数据总缓存大小,单位 MB,必须小于 HJ_BUF_GLOBAL_SIZE。取值范围 2~100000 |
HJ_BLK_SIZE | 动态,会话级 | 2 | HASH 连接操作符每次分配缓存(BLK)大小,单位 MB,必须小于 HJ_BUF_SIZE。取值范围 1~50 |
调整时一般通过sp_set_para_values方法调整,动态参数调整后即可生效无需重启数据库服务。例如调整HJ_BUF_GLOBAL_SIZE到10000,完整命令为:
SP_SET_PARA_VALUE(1,'HJ_BUF_GLOBAL_SIZE',10000);
当然一味的HJ_BUF_GLOBAL_SIZE可能并不是最优解,最佳方式是我们找到报错的SQL语句进行优化,比如将hash join优化为nest loop。
原创文章,作者:lzb,如若转载,请注明出处:https://www.wlkjzx.com/2023/08/07/524%ef%bc%9a%e8%b6%85%e5%87%ba%e5%85%a8%e5%b1%80hash-join%e7%a9%ba%e9%97%b4%e9%80%82%e5%bd%93%e5%a2%9e%e5%8a%a0hj_buf_global_size/