【发布时间】:2021-12-22 20:34:30
【问题描述】:
我们发现一个 SSIS 进程在一夜之间花费的时间太长,并且运行到早上很晚。
进程查询数据库表以返回自上次进程运行(每天运行)以来已更改的文件列表,这可以是工作周内从 3(周末)到 40 的任何值.可能有 258 个 Excel 文件(均基于同一模板)可以导入。
正如我所说,这个过程似乎需要太长时间(它不是在专用服务器上)所以我们决定查看性能改进建议,即将DefaultBufferMaxRows 和 DefaultBufferSize 增加到 50,000 和 @ 987654324@分别为项目中的每个数据流任务。另一个主要建议是始终在表或视图上使用 SQL 命令——我的每个数据流任务(我有九个)都依赖于电子表格中的范围名称——如果它可能有助于提高性能,我想知道什么是 - 是否可以从具有 WHERE 条件的 Excel 工作表中进行选择?
九个导入范围从单个单元格到 10,000 行 x 230 列的范围不等。这些中的每一个都被导入到临时表中,然后合并到适当的主表中,但是我们遇到了导入无法正确理解数据类型的问题(即使使用IMEX=1),所以似乎我可能会得到更好的导入如果我可以以不同的方式选择数据,并将其限制为我感兴趣的行(而不是全部 10,000 行,然后将它们作为任务的一部分进行过滤),即特定列不为空的所有行。
这最初只是一个研究性能改进的练习,但它也将帮助我继续维护和改进包,因为它是业务的重要流程。
【问题讨论】:
标签: sql-server excel performance ssis etl