我们将SQL Server PDW 设备用于我们的数据仓库。我们仓库中的一个表是一个复制表,大约有 2000 万行。作为我们 ETL 过程的一部分,我们需要使这个维度的旧记录过期;但是,我们看到更新少量记录 (<100) 需要 1 个多小时才能完成。如果可以的话,这是我想改进的地方。
当然,我想到的一个选择是将这个维度从复制更改为分布式。我的测试表明,它可以解决 ETL 过程耗时较长的问题(从 1.5 小时缩短到 30 秒),但是针对此维度的分布式版本的所有连接都会受到影响,因为连接几乎从不基于相同的分布柱子。当我查看其中一些查询的执行计划时,我通常会看到ShuffleMove或BroadcastMove操作。
所以我对 PDW 大师的问题是:
还有什么可以做的以提高此维度的复制版本中更新记录的性能吗?
同样,迁移到分布式表似乎不是最好的解决方案,因为它会影响数百个已编写的 SQL 查询和其他人开发的报告。
从SQL Server 2008 开始的From 子句文档简要提到了 3 个连接提示及其基本机制:
然而,似乎没有太多关于何时可能需要使用它们的信息。
似乎它们可以与散列、循环和合并结合使用,这些已经被理解为这个问题的目的。
文档中的相关部分:
对于 SQL 数据仓库和并行数据仓库,这些联接提示适用于两个分布不兼容的列上的 INNER 联接。它们可以通过限制查询处理期间发生的数据移动量来提高查询性能。SQL 数据仓库和并行数据仓库的允许连接提示如下:
REDUCE
减少要为联接右侧的表移动的行数,以使两个分布不兼容的表兼容。REDUCE 提示也称为半连接提示。REPLICATE
将连接左侧表的连接列中的值复制到所有节点。右侧的表连接到这些列的复制版本。REDISTRIBUTE
强制将两个数据源分布在 JOIN 子句中指定的列上。对于分布式表,Parallel Data Warehouse 会执行shuffle move。对于复制表,并行数据仓库将执行修剪移动。要了解这些移动类型,请参阅并行数据仓库产品文档中“了解查询计划”主题中的“DMS 查询计划操作”部分。当查询计划使用广播移动来解决分发不兼容的连接时,此提示可以提高性能。
join sql-server hints sql-server-pdw azure-sql-data-warehouse
SQL Server 2016 中有 3 个新的服务器角色:
知道这些是做什么用的吗?谷歌没有提供有关这些的任何信息。

data-warehouse sql-server role sql-server-pdw sql-server-2016