达梦数据库有关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 设置成驱动表的记录数稍大的整数即可
posted @   fangzpa  阅读(201)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示