4

在过去的几个月里,我已经完成了几个 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>')
4

1 回答 1

2

尝试使用临时表来存储不经过 XML 转换的 500 万条记录,然后使用 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 转换。

于 2012-10-22T09:48:36.190 回答