我在Azure SQL数据仓库中具有典型的星形图案。数据首先通过数据工厂倾倒到分期表中,然后调用主过程,该过程调用其他过程,将数据转换为适当的格式,然后清除该数据片的分期表。
这些分期表应该有索引吗?他们应该有统计数据吗?我最近升级为Gen 2,但没有自动创建统计信息已打开。我担心统计数据会被创建但不会更新,因此最终会减慢比其他任何东西的速度。
对于更多上下文,有一个程序可以重建索引和更新统计信息,该统计信息每天一次过夜。数据负载过程每小时运行。
鉴于这些是分期表,最大的影响将来自以下内容。
在可能的情况下,使用哈希分布。当您在后续步骤中处理表格时,这将提供最佳性能。虽然文档有时会暗示rough_robin分布,并且摄入的速度稍快,但表上的下一个查询将慢。
始终使用统计信息。我建议根据预期用法手动创建它们,以提高您的ELT性能。如果您不创建并更新统计信息,您将来会在以后的某个时候获得可怕的性能。如果您不想进行手动管理统计数据的努力,那么一定要打开汽车统计信息。
考虑使用堆与聚集的柱状表结构进行分期表。通常,分期表是按整行处理的,如果使用堆,您可能会发现在舞台上的性能更好。这需要在您的数据上进行测试,因为具有更高性能的GEN2缓存不适用于堆表。
绝对将您的事实和尺寸表作为群集列仓库索引。哈希分布您的事实,并复制您的尺寸(除非您有十亿行尺寸,在这种情况下,哈希分布可能更合适)。
如果您使用的是CTA算法,则对非群集索引的需求应该非常低。通常,只有当我看到一个无法通过任何其他技术解决的查询问题的性能问题时,我通常会添加索引。
最后,确保您使用的是合理的DWU和资源类。一般的经验法则是,您不应该以少于DWU500和更大的速度运行ELT。如果您不这样做,您会发现您会发现不良聚类的列店索引,这将导致未来的性能问题。
我身边的一些输入 - 您的事实表应分区。实际上,您应该有一项工作,该工作实际上会自动创建分区。事实表有多大?如果您的事实表变得太大,那么根据您的要求,您可以考虑在旧表中引入档案,如果实际上不需要该档案。