【问题标题】:Slow performance for package with XML destination column带有 XML 目标列的包的性能缓慢
【发布时间】:2012-10-22 17:48:36
【问题描述】:

在过去的几个月里,我已经完成了几个 SSIS 包,以将数据从旧数据库移动到 SQL Server 数据库。根据转换的不同,处理大约 500 万条记录通常需要 10-20 分钟。

我在使用其中一个包时遇到的问题是性能非常差,因为我的目标中的一列是 SQL Server XML 数据类型。

 Data comes in like this: 5
 A script creates a Unicode string like this: <XmlData><Value>5</Value></XmlData>
 Destination is simply a column with XML data type

这真的很慢。有什么建议吗? 我做了一个 SQL Trace 并注意到在幕后 SSIS 在插入之前对每一行执行一个转换:

 declare @p as xml
 set @p=convert(xml,N'<XmlData><Value>5</Value></XmlData>')

【问题讨论】:

  • 源和目标使用哪个版本?
  • 我认为那是目的地。什么是“遗留数据库”?
  • 来源也是 SQL,2005。我实施了下面列出的“mceda”建议,它大大减少了我的处理时间......现在一切都很好。

标签: sql-server ssis


【解决方案1】:

尝试使用临时表来存储生成的 500 万条记录而不进行 XML 转换,然后使用 SQL Server 本身将它们从 tempDB 移动到最终目的地:

INSERT INTO final_destination (...)
SELECT cast(N'<XmlData><Value>5</Value></XmlData>' AS XML) AS batch_converted_xml, col1, col2, colX 
FROM   #tempTable

如果 5.000.000 对单个批次来说太多数据,您可以以较小的批次进行(100k 行应该像魅力一样工作)。

分析器捕获的记录看起来像是每行一个命令的 OleDB 转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    相关资源
    最近更新 更多