SSIS 2012,阅读(小)nvarchar(最大),表现迟缓

时间:2016-06-17 06:40:03

标签: sql-server performance ssis

我正在从SQL Server 2012中读取一些数据。源表有大约6亿行,其中两个令人头疼的列是nvarchar(max)。 问题:包含这些blob列时,性能从每秒100k行降至每秒800行。在SSIS中使用blob可以让某些事情变得更快吗?

varchar(max)的最大数据长度为250字节,avg数据长度为50字节。内容是以文本形式存储的XML。我可能会将它们转换为nvarchar(2000),但我稍后需要使用包含更大xml文本对象的表。

目的地只是一个RowCount。

我看到的是

  • SSIS以块的形式处理数据。当SSIS正在运行时,源服务器处于空闲状态:没有CPU,IO或Pagelookup。我不知道SSIS在内部做了什么。
  • 我在服务器上有40 GB的RAM,SSD磁盘,应该是足够的资源。
  • 我试图将Blob和缓冲区存储路径设置为显式文件夹,但我看不到任何内容。
  • SSIS包的工作集很好,没有任何进展。它只消耗大约300-400 MB,就是这样。
  • 没有分页。
  • 我正在使用SQLNCLI11.1提供程序,32K数据包大小。
  • 网络很好,我排除了这一部分。源服务器上的waitstats说它正在等待网络,但这很简单,因为客户端应用程序没有消耗任何东西。同样,如果我遗漏blob列,网络将不断提供400 mbpbs(1 gb网络)。

在我看来,SSIS根本不能很好地处理blob。它非常保守(因为它无法知道数据从缓冲区占用多少空间)。从文档我可以看到SSIS处理blob不同于ordinairy列,它们可能存储在磁盘上,再次读回内存然后发送到管道。无论发生什么,表演都只是一场灾难。

我玩过缓冲区大小和maxbufferrows,它并没有真正发挥那么大的作用。无论我选择做什么,平均表现都是垃圾。

我用谷歌搜索“一切”,这是我的最后一招。到目前为止我错过了什么?

0 个答案:

没有答案