【发布时间】:2019-05-28 07:58:34
【问题描述】:
我正在尝试将 MS Access (.mdb) 文件中的数据插入 SQL Server 2014 标准版。每个文件包含 100 个表。我有超过三千个文件要加载到 SQL Server 中。在 100 个表中,一些被加载到一个公用表中,其余的被加载到 SQL Server 中的单个表中。
目前它正在使用 Microsoft Jet.4.0,通过前端循环遍历文件列表,然后遍历表列表。这个过程需要三到四天才能完成,效率不够。
我想最大限度地利用服务器资源,尽量减少运行时间。我的服务器在主动-被动集群环境中有 128GB RAM 和 32 个核心处理器。如何并行或以任何有效的方法插入所有文件?
我尝试过的:
我编写了一个多线程程序来向 SQL Server 发送插入请求,我发现它同时向 SQL Server 发送多个请求,但 SQL Server 正在串行处理这些请求。因此,性能并没有提高。
我尝试了 SQL Server 代理作业,它证明是并行的,但是对我来说似乎很难控制。
如果我们计算,加载一个文件需要 2 分钟,总共有 3000 个文件。所以,六千分钟就是 4.16 天。平均文件大小约为 100 mb。即使在过去几个月的每一天中搜索并测试了我发现的每种方法后,我也没有发现任何可行的方法。
有没有合适的方法来高效插入数据?
【问题讨论】:
-
你试过DTS吗?这是非常有效的。 Ir 看起来很困难,但使用来自 Enterprise Mánager 的标准导入,然后存储它为您创建 DTS 的步骤。然后你需要为多个文件自定义
-
如果这是一次性工作,为什么不让它用 4 天时间完成。如果你不能很快找到任何东西,你可能最终会使用比这 4 天更多的时间。
-
亲爱的 Zach,感谢您对此问题的关注。为了说明,这是一个每月定期的流程。我们在每个月的第一天或第二天收到所有数据文件,需要在 5 号之前完成合并并准备报告以供上级管理,这导致我们考虑到这个问题。
-
我已使用 CSV 文件中的 SQL Server 批量插入来完成此类任务。明天我在办公室时,我会发布一个示例。您需要先将表格导出为 CSV。批量插入非常快。
-
加载 100 mb 永远不会需要 2 分钟 - 也许 10 秒!您的服务器设置或编程一定有问题。在可接受的时间内首次加载文件。然后尝试并行工作。
标签: sql sql-server tsql