微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

要在Azure SQL DW中加载到阶段表的最佳SSIS数据流设置

我有一个350MB的表,相当宽,有两个varchar(2000)列.通过SSIS数据流,通过OLEDB“快速加载”目标加载到Azure sql DW需要60分钟.我将该数据流上的目标更改为Azure Blob目标(来自 SSIS Azure feature pack),并且在1.5分钟内完成相同的数据流(并且新平面文件中的polybase大约需要2分钟).

对于另一个来源,我有一个现有的1GB平面文件. SSIS数据流入Azure sql DW中的OLEDB目标需要90分钟.将文件复制到blob存储,polybase加载需要5分钟.

SSIS是SSIS 2014,它在与Azure sql DW相同的Azure VM上运行.我知道批量加载比polybase慢得多,因为批量加载漏斗通过控制节点,但polybase在所有计算节点上并行化.但那些批量负载数字非常慢.

为了通过批量加载尽快加载到Azure sql DW阶段表,SSIS数据流和目标的最佳设置是什么?特别是我对以下设置的最佳值感兴趣,除了我没有考虑的任何其他设置:

>舞台表几何= HEAP(我相信最快)
>数据流设置:

> DefaultBufferMaxRows =?
> DefaultBufferSize =?

> OLEDB目标设置

>数据访问模式=表或视图 – 快速加载
>保持身份=未选中
>保持零=?
>表锁=?
>检查约束=?
>每批行=?
>最大插入提交大小=?

解决方法

polybase无疑是加载到sql DW的最快方式.您建议的HEAP也是最快的目的地类型.在 best practices for loading to Clustered Columnstore using SSIS上查看来自sql CAT团队的这篇文章.工程团队的建议是尝试调整DefaultBufferMaxRows(认值为10K),DefaultBufferSize(认值为10 MB),每批次行数和最大插入提交大小.

多年前,我对我们的内部版本的Azure sql数据仓库,PDW(也称为并行数据仓库或APS,设备平台系统)进行了广泛的SSIS性能测试.在那次测试中,我经常发现本地cpu是瓶颈,特别是单核心.如果您通过核心监视cpu利用率,则可以使用Perfmon清楚地看到这一点.

我可以做一些事情来提高吞吐量.如果您在单个核心上受cpu限制,则运行多个并发SSIS包将使您能够使用更多核心并且运行速度更快.为此,您需要将源文件分成多个文件,目标应该是多个表.如果对目标表进行分区并且每个加载包含不同的分区,则可以在加载数据后使用分区切换,以便将其合并到单个表中.

您还可以尝试在程序包中创建多个数据流,这将实现与并行运行多个SSIS加载程序相同的性能,但我相信您仍需要将源文件分成多个文件以及目标,多个表最大化吞吐量.

我尝试的另一种方法是在一个数据流中使用并行加载器.虽然这比一个加载器快,但它比我前面提到的前两个方法慢.

我还发现如果我有SSIS做char到二进制char转换,那加速了加载.此外,使用sql源比使用文本文件作为源更快.

您可以尝试的另一件事是SSIS Balanced Data Distributor.BDD是在源系统上使用多个核心而不必运行多个并发SSIS包的另一种方法.

运行SSIS包时,请使用perfmon监视cpu,以查看您是在单核上运行还是在多核上运行.如果你正在盯住一个核心,那么这很可能是你的瓶颈.

另外,关于VARCHAR(2000)列.如果您确实不希望传入的数据为此大小,请减小VARCHAR列的大小.虽然我们将来会改进这种行为,但目前我们的数据移动服务会将您的VARCHAR数据填充到固定长度.这当然意味着如果最宽的值远小于2000个字符,则移动的数据将超过所需的数据.

我希望这有帮助.

原文地址:https://www.jb51.cc/mssql/76863.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐