在过去的几个月里,我完成了几个 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>')
最佳答案
尝试使用临时表来存储没有 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 转换,每行一个命令。
关于sql-server - 带有 XML 目标列的包的性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12982702/