在过去几个月里,我已经完成了几个SSIS包,用于将数据从旧数据库移动到SQL Server数据库。处理大约5百万条记录通常需要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跟踪并注意到在场景后面SSIS正在每行执行一次转换,然后插入:
declare @p as xml
set @p=convert(xml,N'<XmlData><Value>5</Value></XmlData>')
答案 0 :(得分:2)
尝试使用临时表来存储生成的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转换。