sql - 将数据并行插入 SQL Server 的最佳方法是什么?

标签 sql sql-server tsql

我正在尝试将 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。即使在过去几个月的每一天中搜索并测试了我发现的每种方法后,我也没有发现任何可行的方法。

有没有合适的方法来有效地插入数据?

最佳答案

我将添加一条无益的评论——我并不是要刻薄——只是来自一位年长开发人员的一点历史观点。这是 1980 年代经典的噩梦设计……以及为什么网络的发明如此繁荣。显然,真正的解决方案是使用通用 SQL 后端服务器迁移到 Web 应用程序,而不是尝试将这 1000 个数据集作为批处理来收集……。话虽如此 - 我确实明白有些领域的基础设施不适合网络。

关于sql - 将数据并行插入 SQL Server 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53993315/

相关文章:

SQL 查询 - MySQL 中按时间跨度分组

sql - EXEC sp_executesql 未按预期工作

sql-server - TSQL 触发器而不是插入

sql - 如何在可能包含按字母顺序排列的数字的 varchar 字段上排序?

c# - LINQ to SQL 从字符串创建查询

SQL,如何转换为逻辑 ('not in' 到 'not exists' )

sql-server - 在 Azure SQL Server(逻辑服务器)中使用文件组创建数据库

sql - 动态 View 管理查询

sql - Postgres\d+ (show relation information) 相当于通过 sql

sql - 通过分组累积先前的行