检测分布键值上的数据倾斜

本文介绍如何检测并行数据仓库设备中分布式表的分布键偏差。

原始产品版本: SQL Server 并行数据仓库
原始 KB 数: 3046863

总结

数据倾斜可能发生在Microsoft SQL Server 并行数据仓库的多个不同级别。 本文重点介绍与某些值倾斜的行。 这可能会导致分布式表在一个分布区上放置比另一个分布区更多的数据。 以下查询计算表分布键具有特定值的行数:

select distribution_key, count(distribution_key)

from distributed_table

group by distribution_key

--having count(distribtuion_key) >5000

order by count(distribtuion_key) desc

注意

注释掉该 having 子句。但是,如果要快速检查是否有重大偏差,则此子句可能会告诉你。 可能需要将具有值的值调整为对结果集有意义的内容。 例如,如果所有值都有 5,000 条记录,建议将此值设置为 7,500 或 10,000 以指示问题。

关于偏斜何时成为问题,答案并不确定。 当倾斜分布的性能变得明显且应用程序无法容忍这种情况时,倾斜就成了问题。 经验法则是,设备可以容忍所有表中的倾斜率为 10% 到 20%。 在此阈值内,倾斜的分布甚至应在并发下出现。 超出此阈值后,在处理数据时,可能会开始看到一些长时间运行的分布。 某些实现可能能够容忍更大的偏斜,某些实现可能无法容忍这么多。 需要测试才能确定实现的实际阈值。

详细信息

如果倾斜值也用作联接条件,而另一端则向相同的值倾斜,则联接中的行数可能会发生爆炸。 这可能会导致查询执行花费很长时间。

重要

请特别注意 NULL 值的数量,因为这些值可能会导致联接问题。