数仓的等待视图中,为什么会有Hashjoin-nestloop?
💡
原文中文,约1200字,阅读约需3分钟。
📝
内容提要
本文介绍了GaussDB(DWS)中的HashJoin-nestloop等待视图的含义和影响。当内存不足时,会通过内外表交换或执行nestloop使查询平稳进行,防止内存报错。建议将参数hashjoin_spill_strategy设置为2以规避问题。
🎯
关键要点
- GaussDB(DWS)中有3种常见的join方式:HashJoin、MergeJoin和NestLoop。
- 等待视图中显示HashJoin-nestloop表示内存不足时的处理方式。
- 当两张大表join时,若统计信息不准确,可能导致内存膨胀和内存过载。
- hashjoin_spill_strategy参数控制hashjoin的行为,默认为0,取值范围为0-6。
- 取值为2时,hashjoin行为与原本一致,即使内存不足也会强制执行hashjoin。
- HashJoin-nestloop可能导致性能劣化,尤其在数据量和统计信息差异较大时。
- 为避免HashJoin-nestloop导致的超时,可以将hashjoin_spill_strategy设置为2。
➡️