我正在尝试将MS Access(.mdb
)文件中的数据插入SQL Server 2014 Standard版。每个文件包含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。即使在过去几个月的每一天中,对所有我发现的方法进行谷歌搜索和测试之后,我都没有找到有效的方法。
有没有合适的方法可以有效地插入数据?
答案 0 :(得分:0)
我将添加无用的评论-而且我也不想trying嘴-只是来自较老的开发人员的一些历史观点。这是1980年代的经典噩梦设计,以及为什么网络发明如此繁荣。显然,解决此问题的真正方法是使用通用SQL后端服务器移至Web应用程序,而不是尝试批量收集这1000个数据集……。话虽这么说-我确实知道有些地方没有网络基础设施。
答案 1 :(得分:0)
我建议使用DtsWizard.exe-它会即时生成一个程序包,您可以保存并修改。您可以使用它来熟悉SSIS和所有加载选项-即。并行加载,快速加载等。
更重要的是-我还建议在加载 前禁用触发器和索引。这可以产生巨大的变化。如果您拥有FK索引,则可以探索将其保持打开状态-在某些情况下可能会有所帮助。
另一个选择是批量加载-您可以使用命令行-或c#SqlBulkCopy类-并相应地设置选项以绕过触发器,等等。人们提到加载记录应该比您所经历的要快,其中一些选项会降低性能。
还,您正在加载Blob吗? XML?您有xml索引吗?
答案 2 :(得分:0)
因为批量插入作业可以锁定数据库文件,请考虑增加系统tempdb数据库和目标数据库的文件数。
建议使用与 CPU 数量一样多的文件(可用于 SQL Server)-(它不是 SQL2014 上的默认安装选项),多添加几个不会有什么坏处,有时可以降低闩锁,如果您在不同的频道上有多个磁盘分区,则更是如此。 那么你可以选择在一个分区文件上存储一张表。 我还建议将 Sql Server 代理用于多个作业,每个作业都有一个简单的批量插入 cmd 行