最近在项目中调试存储过程碰到一些关于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 FundID, SeatNo, InvTP,SUM(Balance), SUM(Available), SUM(IncomeAmt), '20240807', 'Y' FROM TESTA t, TESTB s WHERE t.FundAcct = s.FundAcct GROUP BY FundID,SeatNo,InvTP; 上面执行计划用到了hash和hagr,hagr参数可以按照上面示例1来调整, hash可以通过调整HJ_BUF_SIZE和JOIN_HASH_SIZE避免hash连接刷盘和hash冲突,来提升效率 JOIN_HASH_SIZE 设置成驱动表的记录数稍大的整数即可
标签:FundID,SeatNo,SUM,分组,hash,BUF,达梦,SIZE From: https://www.cnblogs.com/fangzpa/p/18347564