将具有不同架构的多个 xml 文件(例如:30000)导入到 Sql Server 2008 的最佳方法是什么?
我目前正在遍历每个文件,将数据加载到datatable
并SqlBulkCopy
用于插入数据,但这需要很长时间(大约 1.5 小时)。
将具有不同架构的多个 xml 文件(例如:30000)导入到 Sql Server 2008 的最佳方法是什么?
我目前正在遍历每个文件,将数据加载到datatable
并SqlBulkCopy
用于插入数据,但这需要很长时间(大约 1.5 小时)。
这不应该花这么长时间。据我估计,你有大约 600MB 的数据;您应该能够毫无困难地接近 10MB/s 或至少1MB/s - 这意味着 1-10 分钟应该很容易实现。
该怎么办:
没有更多细节,很难准确,但我可以推测:
SqlBulkCopy
通常很快,因此您的插入可能不是瓶颈。您可以比数据表快一点,但这可能不是问题。DataTable
s 可以有“索引”;即主键和约束。这些实施效率非常低 - 这些肯定会导致问题。SqlBulkCopy
速度很快,但最好是多行。如果您只复制每个 1 个文件SqlBulkCopy
,则意味着 30000 次调用,并且在数据库端可能至少有 30000 个 fsync。您应该只使用一个SqlBulkCopy
.XmlDocument
文件并使用许多低效循环和/或 XPath 进行查询),您可能会遇到 CPU 负载问题。考虑到这一点,我将按此顺序查看以下内容
DataTable
)SqlBulkCopy
实例 - 仅使用一个(每个线程)该命令的灵感来自检查此问题的难度。磁盘负载不太可能有问题,但检查起来很简单,因此您不妨从消除这种可能性开始。数据库模式问题并不是那么不可能,但要确定它们需要做更多的工作(它是哪个索引,我是否通过删除它来影响另一个工作流程?)所以我会检查最后一个。