|
|
数据倾斜是指大型数据集中数据在分区、节点或键之间的分布不均匀。在数据库系统中,当分区列中的某些值或范围出现的频率远高于其他值或范围时,就会发生这种情况。它会严重影响查询性能,因为它会削弱并行处理的有效性。工作不是均匀地分布在所有可用资源上,而是负责“热点”分区的节点或任务变得过载。这会造成瓶颈,大多数计算或存储资源处于空闲状态,等待少数过载的单元完成,从而大幅增加查询延迟。这在数据仓库和Spark集群等分布式系统中尤其成问题。
复杂查询的最快数据仓库引擎数据倾斜主要在分组、连接、排序和窗口函数等阶段影响性能,这些阶段严重依赖于基于键在节点之间 shuffle 数据。导致问题的关键特征包括分区大小不平衡超过内存容量,导致昂贵的磁盘溢出;拖尾任务延迟整个作业完成;到过载节点的网络拥塞;以及集群资源未被充分利用。其影响不仅限于OLAP查询,还扩展到实时流处理和索引操作。不解决倾斜问题会浪费集群容量、增加成本并降低用户体验。
为了缓解数据倾斜,应根据操作和数据库应用量身定制的策略。对于聚合,可以考虑近似算法或预聚合。对于连接,为小型维度表实现广播连接,利用数据库功能如倾斜提示,或使用加盐(为键添加随机前缀/后缀)等技术拆分大型分区。在连接键上对数据进行分桶可确保更均匀的分布。尽早过滤极度倾斜的键或对数据进行非规范化也可能是解决方案。应用这些缓解措施可以恢复并行效率,减少延迟,优化资源使用,提供可预测的性能并节省成本。
|
|