达梦数据库有关hash及分组等操作相关优化
最近在项目中调试存储过程碰到一些关于hash及分组相关的性能问题
示例1:在调试过程中, 该sql执行很久后面报超出全局 hash join 空间的错误,重新调整HJ_BUF_GLOBAL_SIZE ,执行一个小时也不出结果。
INSERT INTO t_test
(SELECT FundID,
SeatNo,
SUM(Balance),
SUM(Available),
SUM(IncomeAmt),
'20240807',
'Y'
FROM TESTA
GROUP BY FundID,SeatNo) ;
sql执行计划如下![]()


上面主要是查询分组聚合太慢 ,可以通过hint 放大harg的桶数和单个操作符的内存:
/*+USE_DHASH_FLAG(3) HAGR_HASH_SIZE(100000000) HAGR_BLK_SIZE(50) HAGR_BUF_SIZE(3000) HAGR_BUF_GLOBAL_SIZE(18000) */
参数说明:![]()


上面sql在debug调试中加了并行,debug的时候一直在执行不结束,单独拿出来在另外一个窗口执行很快出结果。原因未知,在调试过程中尽量不要加并行。
示例2:下面sql执行也一样慢SELECT t.FundID,
t.SeatNo,
SUM(t.Balance),
SUM(t.Available),
SUM(t.IncomeAmt),
'20240808',
'Y'
FROM T1 t, t2 s
WHERE t.FundAcct = s.FundAcct
GROUP BY t.FundID,t.SeatNo;
上面执行计划用到了hash和hagr,hagr参数可以按照上面示例1来调整,
hash可以通过调整HJ_BUF_SIZE和JOIN_HASH_SIZE避免hash连接刷盘和hash冲突,来提升效率
JOIN_HASH_SIZE 设置成驱动表的记录数稍大的整数即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了