概述:我正在运行 SSIS 包以将数据从 SQL Server 2016 复制到以引号分隔的平面文件管道并处理转义序列。我在数据流任务中使用脚本组件作为将数据写入平面文件的源,因为我必须从具有不同架构的 100 多个表中复制数据,所以这是唯一适合我的动态方法。此外,数据量很大,大多数表都有 100 多列和 500 万多条记录。我已经设置我的主包为不同的表(通过 SQL 表和参数管理)并行调用同一个包 12 次。最重要的是,我的子包正在使用 For Loop 容器和参数批量创建文件。
问题陈述:当我从 SSDT 运行我的包时,它会在处理记录后立即将数据写入文件,但是当我通过 SQL Server 代理作业运行相同的包时,它需要更长的时间并将数据写入文件处理完所有记录后。
示例:让表 'a' 有 400 万条记录,我生成 4 个文件,每个文件 100 万条,在相同的参数 SSDT 开始在文件 ~50K-60k 中写入行(可能取决于缓冲区大小),因为它们处理但当我从 SQL Server 代理作业运行时,具有相同配置的相同包处理所有 100 万条记录并尝试一次写入所有记录。
问题:因为一次写入 100 万条记录,文件创建需要花费大量时间来写入 100 万条记录 ~5-10 分钟因表中的列数而异,但从 SSDT 来看,它要快得多 ~2-5同一张桌子的分钟。
谁能建议我必须检查哪些设置才能使其更快地工作。它从中选择数据的表已被很好地索引。在 SSMS 中针对数据库运行时,对 100 万条记录的相同查询耗时约 2-4 分钟。