【达梦数据库】超出全局hash join空间问题处理
目录
- 现象
- 问题原因
- 解决思路
- 排查过程
现象
服务器信息:核数 | 4Core
,内存 | 16G
达梦数据库,经过优化脚本优化后HAGR_BUF_GLOBAL_SIZE=700
,用户在业务压测时,仍然报错:Out of hash join buf space ,please increase HJ_BUF_GLOBAL_SIZE
;
问题原因
HJ_BUF_GLOBAL_SIZE参数较小,会话都会消耗hash join空间,导致在一定阶段后,会出现OOM报错。
解决思路
- 增加hash join空间;
- 获取SQL,需要将哈希连接改成嵌套循环;
哈希连接通常用于等值连接,它会在内存中构建哈希表,然后扫描另一张表进行匹配,效率较高。而嵌套循环连接则是逐行遍历外层表,对于每一行,再遍历内层表查找匹配的行,适合小数据集或者需要利用索引的情况。
在执行计划中哈希连接,但希望改用嵌套循环。这可能是因为哈希连接在某些情况下效率不高,比如内存不足,或者数据分布导致哈希表太大。或者用户可能是在特定的数据库版本中,优化器没有选择最优的连接方式,需要手动提示。
排查过程
参考链接: 达梦超出全局hash join空间的问题处理