达梦数据库有关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 @ 2024-08-09 17:10  fangzpa  阅读(15)  评论(0编辑  收藏  举报